- 707 名前:700 mailto:sage [2009/10/04(日) 03:45:43 ]
- なんか変にハマったのでもう一度質問させてください。。。
下のような関数を作りました sub match($@){ use strict; use re "eval"; my $str = shift; my @member = @_; my $regex = join("|", map{ "$_(?{\$ret = q{$_}})"} @member); my $ret; $str =~ /$regex/; return $ret; } 以下の呼び出しを行うと、 print match("hoge 123", qw(\d \w \s)), $/; #=> \w print match(" 123hoge", qw(\d \w \s)), $/; #=> print match("123 hoge", qw(\d \w \s)), $/; #=> となり、思った結果を返してくれませんでした ですが、match関数に渡す配列の順番を変えたところ、 print match("hoge 123", qw(\d \w \s)), $/; #=> \w print match(" 123hoge", qw(\w \d \s)), $/; #=> \s print match("123 hoge", qw(\d \w \s)), $/; #=> \d と、期待通りの結果を返してくれました これは一回通った正規表現に対してはサブパターンは呼び出されないということなんでしょうか。。。
|

|