есть тестовый код:
use strict;
use Data::Dumper;
my @a = qw(a b c);
print scalar(@a), "\n", Dumper(@a), "\n";
if ( $a[5]->[1]->[0] ) { die; }
print scalar(@a), "\n", Dumper(@a), "\n";после его выполнения получаем:
3
$VAR1 = 'a';
$VAR2 = 'b';
$VAR3 = 'c';6
$VAR1 = 'a';
$VAR2 = 'b';
$VAR3 = 'c';
$VAR4 = undef;
$VAR5 = undef;
$VAR6 = [
undef,
[]
];почему в массиве появились новые элементы?
> if ( $a[5]->[1]->[0] ) { die; }if ( defined($a[5]) && defined($a[5]->[1]) && defined($a[5]->[1]->[0]) && $a[5]->[1]->[0] ) { die; }
> почему в массиве появились новые элементы?
Потому что ты их создал!
>> if ( $a[5]->[1]->[0] ) { die; }
> if ( defined($a[5]) && defined($a[5]->[1]) && defined($a[5]->[1]->[0]) && $a[5]->[1]->[0]
> ) { die; }
>> почему в массиве появились новые элементы?
> Потому что ты их создал!Странная логика...
Функция ПРОВЕРКИ изменяет проверяемое значение - прям квантовая механика...
Если не сложно, ткните, где можно об этом почитать?
perlfunc defined - ничего не проясняет.И каким же тогда способом проверить наличие опциональных полей у элемента массива?
>>> if ( $a[5]->[1]->[0] ) { die; }
>> if ( defined($a[5]) && defined($a[5]->[1]) && defined($a[5]->[1]->[0]) && $a[5]->[1]->[0]
>> Потому что ты их создал!
> Странная логика...Я не объясняю логику. Я пою то, что вижу: обращение к несуществующему элементу массива создало этот элемент с каким-то undef-ом в качестве значения.
> Функция ПРОВЕРКИ изменяет проверяемое значение - прям квантовая механика...
Самые обычные _побочные эффекты.
> Если не сложно, ткните, где можно об этом почитать?
> perlfunc defined - ничего не проясняет.Без понятия. Я перла _вообще не знаю. И этот defined() в гугле на чём-то вроде stackoverflow нашёл. Ну, набери <perl defined> в гугле.
> почему в массиве появились новые элементы?См. http://perldoc.perl.org/perlref.html на предмет "autovivification". А в книге "Intermediate Perl" (у нас вышла под названием "Perl: изучаем глубже") этому целая глава посвящена. Рекомендую.
>> почему в массиве появились новые элементы?
> См. http://perldoc.perl.org/perlref.html на предмет "autovivification".autovivification !!!
Спасибо, теперь зная "почему оно так" - многое стало понятным.