池田と申します。 正規表現で暗黙の $_ 内の文字列を検索して、$&, $1 などに マッチした結果が入っていないように見えるのですが、こちらは仕様でしょうか? 以下のように、ruby 1.6.8 (2002-12-24) で動いているスクリプトが、 ruby 1.8.1 (2003-12-25) では予想に反するようです。 % ruby-1.6 -v ruby 1.6.8 (2002-12-24) [powerpc-darwin7.0] % echo abc | ruby-1.6 -ne '/(a)/ and puts($_)' abc % echo abc | ruby-1.6 -ne '/(a)/ and puts($&)' a % echo abc | ruby-1.6 -ne '/(a)/ and puts($1)' a % ruby -v ruby 1.8.1 (2003-12-25) [powerpc-darwin] % echo abc | ruby -ne '/(a)/ and puts($_)' abc % echo abc | ruby -ne '/(a)/ and puts($&)' nil % echo abc | ruby -ne '/(a)/ and puts($1)' nil また、今取り出した CVS の HEAD にある ruby も 1.8.1 と同様の結果になりました。 % ./ruby -v ruby 1.9.0 (2004-06-28) [powerpc-darwin7.4.0] % echo abc | ./ruby -ne '/(a)/ and puts($_)' abc % echo abc | ./ruby -ne '/(a)/ and puts($&)' nil % echo abc | ./ruby -ne '/(a)/ and puts($1)' nil なお、ruby 1.8.1 で $_ を明示すれば、$&, $1 などにマッチした 結果が入りました。 % echo abc | ruby -ne '(/(a)/ === $_) and puts($_)' abc % echo abc | ruby -ne '(/(a)/ === $_) and puts($&)' a % echo abc | ruby -ne '(/(a)/ === $_) and puts($1)' a 以上、よろしくお願いします。 -- 池田孝志