2012-03-07 3 views
1

は小さなコードハッシュ割り当て:: Utilの

use List::Util qw(first); 

my $x = {FOO => undef}; 
my @array = (1,2,3,4,5,6,7,8,9); 

$x->{FOO} = 
    { 
     'INFO' => first { $_ eq 1 } @array, 
     'TI' => first { $_ eq 2 } @array, 
    }; 

は、それは、ネストされたハッシュを作成していないです。ここにはo/p

$VAR1 = { 
      'FOO' => { 
        'INFO' => 1 
        } 
     }; 

私はなぜこれが起こっているのか分からないのですか?助けてください。

答えて

3

関数のプロトタイプは&@です。つまり、引数としてブロックとリストが使用されます。ブロックの後のすべてがリストとして使用されます。あなたは括弧で全体first式を置く、または匿名サブを使用することができますいずれか

$x->{FOO} = {  
    'INFO' => first { $_ eq 1 } (@array, 'TI' => first { $_ eq 2 } @array), 
}; 

:したがって、あなたのコードは同等です

$x->{FOO} = { 
    'INFO' => first(sub { $_ eq 1 }, @array), 
    'TI' => first(sub { $_ eq 2 }, @array), 
}; 
+1

それは構文エラーだ - オペレータが期待されている場所を見つけアレイ.. .. – rpg

+0

@rpg:weird。 'map'はその構文をサポートしています。 –

+1

匿名サブを 'first'に渡す方がずっと簡単です:' INFO =>最初(sub {$ _ eq 1}、@array)、 'など – Borodin

関連する問題