[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 22:14 / Filesize : 220 KB / Number-of Response : 914
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Perlについての質問箱 30箱目



1 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:54:12 ]
"The duct tape of the Internet" こと、Perlについての質問箱です。
"There's more than one way to do it" ということで、Perlの奥深さについて皆で語り合い、追求してまいりましょう。

CGIについての質問は板違いです。WEBプログラミング板でどうぞ。
CGIとPerlの区別がつかない人もWEBプログラミング板に行ってください。
(WEBプログラミング板 pc8.2ch.net/php/ )

CGIの質問は答えがPerlと全然関係ない話に帰着する場合が多かったりするのでWEBプログラミング板に行って聞いたほうが得ですよ。
このスレでは(CGI以外の)純粋にPerlのみに関係する質問を取り扱っていこうと思います。
スレ違いの質問にはスルーか、速やかな誘導をお願いします。

www.perl.org/get.html
● 2006/12/21現在の最新版: 5.8.8
● 2006/12/21現在の開発版: 5.9.3

前スレ
Perlについての質問箱 29箱目
pc11.2ch.net/test/read.cgi/tech/1166708139/

リンク集は>>2-3
過去スレは>>4

402 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 22:23:56 ]
\Gは置換文では使わないほうがいいよ。代入されるとposがリセットされてしまうから
あとを置換しながらposを保持することはできないのでコピーを作ることを考えてみては
自分ならこう書く

my $replaced_text;
pos $text = 0;

while (pos $text < length $text) {
 if ($text =~ m/\G $regexp/gcsx) {
  # ここで入力による分岐処理を行う



 }
 elsif ($text =~ m/\G(.+?) (?=$regexp)/gcsx) {
  $replaced_text .= $1;
 }
 else {
  $text =~ m/\G (.*)/gcsx;
  $replaced_text .= $1;
 }
 





403 名前:デフォルトの名無しさん mailto:sage [2007/05/01(火) 22:28:17 ]
s///gが一種のループなのでこんな手もある。
my $mode;
$text =~ s{($regexp)}{
my $r;
if (!defined $mode) {
my $key;
do {
print "置換する? [y]es [n]o [a]残り全て [g]キャンセル ";
$key = <STDIN>;
chomp($key);
} while ( $key ne "y"
and $key ne "n"
and $key ne "a"
and $key ne "g" );
if ($key eq 'y') {
$r = $replace;
} elsif ($key eq 'n') {
$r = $1;
} elsif ($key eq 'a') {
$mode = 'a';
} else {
$mode = 'g';
}
}
if ($mode eq 'a') {
$r = $replace;
} elsif ($mode eq 'g') {
$r = $1;
}
$r;
}gme;






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<220KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef