[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 メーリングリストの案内