作者: 藤岡和夫
日時: 2004/8/16(10:48)
On Mon, 16 Aug 2004 01:07:43 +0900
藤岡和夫 <kazuf@...> さんwrote:

> > print grep{${$c||={map{($_=>1)}@hoge1}}{$_}}@hoge2;
> 
>  うーむ、||= なんて代入演算子があるとは(^^;)知らなかった。
> 
>  この文のどこから優先的に実行されるのだろうと思うのですが、、、、文脈的
> には、map 関数からとは思うが、関数的に見ると、$_ が同じ値を持たないのは
> へんとも思う。関数的に評価が進行すると $_ が @hoge1 に含まれる数の場合の
> み、grepのブロックの式が真となるわけですね。map 関数の動作を考えるとへん
> な気がするのは致し方ない???

いろいろ調べたけど、grep 関数の中で map 関数を使っている例は他にはないよ
うでした。並置して使う例はごまんとあるけど・・・

内部的に実際のところどう動いているのだろうと悩むよりは、

@hoge1 = (3,1,2);
@hoge2 = (1,2,3,1,2,3,4,5,6);
$c = {map{$_ => 1}@hoge1};
print grep{${$c}{$_}}@hoge2;

のように書くのが精神衛生上は良いかも?

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