マップを使用して2D配列の最初の要素を抽出しています。ここに小さなコードスニペットがあります。このマップの動作を理解します
my $array = [ [1,11,111], [2,22], undef, [4] ];
my @firstList = map { (defined $_) && $_->[0] } @$array;
ここで、値がundefまたは$ arrayの要素の最初の要素の要素を持つ配列を返すようにマップが期待しています。
しかし、出力は私が期待しているものと同じではありません。 undefについては、 'スカラー'型の要素を取得しています。
マップ・ステートメントを次のブロックで変更すると、予期した結果が得られます。
my @firstList = map { $_->[0] } @$array;
これらの2つのマップステートメントについて理解してください。
小さな修正: 'defined undef'は' '' 'を返します。 – Dallaylaen
私はなぜundef - > [0]が(厳密に 'strict'の下で)うまくいくのだろうと思っていました。それが[autovivified](http://en.wikipedia.org/wiki/Autovivification)であることがわかります。つまり、暗黙のうちに元の配列の '[]' **に設定されています**。 – Dallaylaen
@Dallaylaen:これは、CPANがhttp://search.cpan.org/perldoc?autovivificationに "autovivification"モジュールを持っていて、 'no autovivification; –