[Tokyo-pm] これはどう動くの?

Tatsuhiko Miyagawa miyagawa @ edge.co.jp
2004年 8月 26日 (木) 05:26:51 CDT


宮川です。

On Thu, 26 Aug 2004 19:00:48 +0900
Keiichi Okabe <okabek at beige.ocn.ne.jp> wrote:

> sub init_sh
> {
>     my $fname = shift;
>     local $/ = "";
>     open my $fh, $fname or die $!;
>     %lslr = map {sub {substr(shift,0,-1), \@_}->(split /\n/)} <$fh>;
> }
> 
> という箇所なんですが,ls -lR で作成したファイルをハッシュに
> いれようとしていると思うのですが,最後の行はどう動くのでしょうか.

map も sub もつかわずに書くと、

sub init_sh {
    my $fname = shift;
    local $/ = "";
    open my $fh, $fname or die $!;
    %lslr = ();
    for (<$fh>) {
        my @lines = split /\n/;
        my $head = substr(shift @lines, 0, -1);
        $lslr{$head} = \@lines;
    }
}

つまり

foo:
a
b
c

bar:
d
e
f

ってのを、

%lslr = (
  foo => [ "a", "b", "c" ],
  bar => [ "d", "e", "f" ],
);

っていうハッシュにしてるのですね。


-- 
Tatsuhiko Miyagawa <miyagawa at livedoor.jp>



Tokyo-pm メーリングリストの案内