作者: 藤岡和夫
日時: 2002/5/06(00:20)
On Sun, 5 May 2002 23:43:59 +0900
kikwai@... (機械伯爵) さんwrote:

> ※紅玉はルビーだけど、日本語で書くと林檎(Apple)みたいな・・・(爆)

 確かにそうですね(^^)りんごの銘柄にありそうな(^^;)

> >  自然言語的と言ったのはどの言語だって、アナロジーで推測してこう書けるか
> > なと思って書くことは多いわけだけど、いろいろな書き方が許されるのがPerlの
> > 特徴。連想配列でキーだけを取り出すことはほとんどないので、このような書き
> > 方は普通試さないと思うのですけど、書いてみると動くので、ほーっと思っただ
> > けなんです。
> 
>  awkは連想配列っきゃないので、リストの代わりに時々インデックスを使います
> から、AWKユーザへの配慮かもしれませんね・・・
> 
> ※Perlはそこらへん律儀だから・・・

 自然言語的というのはLarry Wall自身が言っていて、具体的にどのようなこと
かというとそういうことなんだけど(^^;)

 少し敷衍すると、

@tbl_list = sort keys %tbl;

と、

foreach $item (sort keys %tbl){
    push(@tbl_list, $item);
}

は、同じことを結果としてやるわけですけど、

sort keys %tbl

はまったく同じ表現ですけど、違うように機能しています。配列として連想配列
から一度に配列に取り出すか、変数として一つずつ取り出すかですね。

 これを配列コンテキストかスカラーコンテキストで評価する場合の違いという
ように言うわけです。コンテキスト(context)は日本語でいうと文脈です。言葉
の使い方(文脈)で意味が変わってくる、すなわち動作が変わってくるというのが、
Perlなんです。私はおそらくこのことを自然言語的と言っているのだと思ってい
ます。通常、(sort keys %tbl)はスカラーコンテキストで評価する場面が多いの
で(常套句だから)、配列コンテキストで評価した場合に動くとおーっと思うわけ
です。

藤岡 和夫
FGALTS@...
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/