Perl/めも/正規表現

Top / Perl / めも / 正規表現

s///ee

$r = '$1';
$str =~ s/(.*)/$r/e;	# $strは'$1'に置換される
$str =~ s/(.*)/$r/ee;	# s/(.*)/$1/ と等価

$rr = '$r';
$str =~ s/(.*)/$rr/e;	# $strは'$r'に置換される
$str =~ s/(.*)/$rr/ee;	# $strは'$1'に置換される
$str =~ s/(.*)/$rr/eee;	# s/(.*)/$1/ と等価

eを重ねるとevalを重ねるような評価になる。
どのバージョンからなのかは知らない。

ただし結局 /e な扱いなので HOGE$r などは評価できない。

# イバラの道
# $rに / が含まれると転ける
eval "\$str =~ s/(.*)/$r/;";

多分これが一番まとも

# \1などは使えないがまだ機能する
# eの数だけクオートがネストする
$r =~ s/\}/\\\}/g;
$str =~ s/(.*)/qq{qq{$r}}/ee;

m//g

マッチする箇所を抽出

push(@words, $str =~ /\w+/g);

splitの罠

# 多分意図しない動作
split(/(hoge)/, $string);
# こっちが正解
split(/(?:hoge)/, $string);

前者は qw(1st hoge 2nd hoge 3rd) のような結果が返る。

  • 正規表現で a|b の時 aがbより優先される

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2006-02-09 (木) 19:53:58 (6650d)