#contents

* 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