- 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;
|

|