作者: Bruce.
日時: 2004/8/28(22:39)
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/