Bruce. です。
> > sub init_sh
> > {
> > my $fname = shift;
> > local $/ = "";
> > open my $fh, $fname or die $!;
> > %lslr = map {sub {substr(shift,0,-1), \@_}->(split /\n/)} <$fh>;
> > }
>
> 昨晩から考えていたのですが、疑問点があるので、教えていただきたく。
>
> まず、単純な疑問ですが、ファイルハンドルの $fh が与えられていないので、
> このルーチンは動かないのではと・・・
先に動作確認してましたが動きましたよ? (Active Perl 5.8.4)
ファイルハンドルは直前にopen()してますし。あ、ファイル名の間違いですか?
> map関数の使い方は例外的なので、最初は何かの間違いだろうと思ったのです
> が(^^;)サブルーチンのデリファレンスになっているという理解でよいわけです
> ね。矢印演算子の右項はテキストからの入力が改行で分割されて、サブルーチン
> のリスト引数になっている。通常は、矢印演算子の左項はサブルーチンのリファ
> レンスである必要があるのだけど(そこで引っかかっていたのですが)、サブルー
> チンがそのまま置かれていて、自動的にリファレンスが生成している例と考えら
> れます。(この説明の元になる情報はらくだ本第3版で見つけた)
>
> 追伸
>
> このスクリプトはJperl 5.005_03 ではエラーにはならないが、上記のような問
> 題がある。が、Perl 5.8.4では動きます。問題解決???
えっと、(5.8.4で)とりあえずは動いたんですよね?
別の部分で、このコードは正しく期待通りに動くことが保証されたコードで
あるかが話題になりました。無名サブルーチン内のshiftと\@の評価順序が
が期待通りの順序であるかどうかという点です。
で、サブルーチンのデリファレンスという認識はあっていると思います。作った
その場で呼び出していると。
Tokyo.pmのメイリングリストの内容はアーカイブされて公開されています。
http://mail.pm.org/archives/tokyo-pm/
をどうぞ。
--
木村浩一
I thought what I'd do was, I'd pretend I was one of those deaf-mutes.
mail kbk@...
web www.kt.rim.or.jp/~kbk/