Używam mapy do wyodrębnienia pierwszego elementu z tablicy 2D. Oto mały fragment kodu.zrozumienie zachowania mapy
my $array = [ [1,11,111], [2,22], undef, [4] ];
my @firstList = map { (defined $_) && $_->[0] } @$array;
W tym miejscu spodziewam się, że mapa zwróci tablicę zawierającą elementy o wartości undef lub pierwszy element elementu tablicy $ tablica.
ale wynik nie jest taki sam, jak się spodziewam. Dla undef, otrzymuję element typu "skalarny".
Jeśli zmienię wyciąg z mapy z następującym blokiem, to otrzymuję oczekiwany wynik.
my @firstList = map { $_->[0] } @$array;
Proszę mi pomóc zrozumieć te dwa wyciągi z mapy.
Mała poprawka: 'defined undef' zwraca' '''. – Dallaylaen
Zastanawiam się, dlaczego undef -> [0] działa (nawet pod 'strict'). Okazuje się, że jest to [zindywidualizowane] (http://en.wikipedia.org/wiki/Autovivification), tj. Niejawnie ustawione na '[]' ** w oryginalnej tablicy **. – Dallaylaen
@Dallaylaen: To wywołuje wystarczająco dużo osób, że CPAN ma moduł "autoworyzacji" na http://search.cpan.org/perldoc?autovivification, który pozwala ci go wyłączyć za pomocą komendy 'no autovivification;' –