池田と申します。

正規表現で暗黙の $_ 内の文字列を検索して、$&, $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

以上、よろしくお願いします。

--
池田孝志