[Tokyo.pm] scalar value of list

Kazumasa Utashiro utashiro @ iij.ad.jp
2002年 4月 6日 (土) 03:11:10 CST


From: Dan Kogai <dankogai @ dan.co.jp>
Subject: Re: [Tokyo.pm] scalar value of list
Date: Sat, 6 Apr 2002 03:43:35 +0900

> > 以前は、リスト (配列じゃなくて) のスカラー値は、リストの最後の要素の値
> > だったんですが、どうも最近は違うことに今更気が付きました。
> >
> > 	$myname = ('whoami?', split('/', $0));
> >
> > を実行すると、以前は $myname にはコマンド名が入っていたのですが、今は
> > 数字が入ります。
> >
> > ひょっとして、perl5 は最初からこうだったんでしょうか?
> 
> だったと思います。というより私はむしろそうでない時代の方の記憶
> があやふやです。

そりゃあんまりな仕様変更だと思ってマニュアルを探してみたら、perldata 
には、まだこう書いてあって、実際その通りに動きます。

       In a context not requiring a list value, the value of what
       appears to be a list literal is simply the value of the
       final element, as with the C comma operator.  For example,

           @foo = ('cc', '-E', $bar);

       assigns the entire list value to array @foo, but

           $foo = ('cc', '-E', $bar);

       assigns the value of variable $bar to the scalar variable
       $foo.

挙動が変わったのは、

	$myname = ('whoami?', split('/', $0));

としたときに、最後の split が scalar context で評価されるようになった
点でした。返ったきた数値をちゃんとチェックすればわかることでしたね。と
いうわけで、先のメールの内容は間違いでした。

少なくとも 5.00302 では、今と同じ動作をします。ドキュメントには明記さ
れているんでしょうか?

			*	*	*

配布条件を入れるために fold.pl をバージョンアップしました。コードも少
し変わってますが、何のために変更したのか忘れてしまった :)。これやって
て、上の問題を発見しました。

ついでに stripe が perl5 でちゃんと動かないことも発見しました。これは
調べてる暇がないのでそのままです。1993年からそのままだなあ。アドレスも
変わってないし…

	http://www.srekcah.org/~utashiro/perl/scripts/fold_pl/

--utashiro



Tokyo-pm メーリングリストの案内