URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9878
[ Назад ]

Исходное сообщение
"Самопроизвольное создание Перлом элементов массива"

Отправлено GaidukAV , 07-Июл-14 08:44 
есть тестовый код:


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,
      []
];

почему в массиве появились новые элементы?


Содержание

Сообщения в этом обсуждении
"Самопроизвольное создание Перлом элементов массива"
Отправлено Andrey Mitrofanov , 07-Июл-14 09:45 
> if ( $a[5]->[1]->[0] ) { die; }

if ( defined($a[5]) && defined($a[5]->[1]) && defined($a[5]->[1]->[0]) && $a[5]->[1]->[0] ) { die; }

> почему в массиве появились новые элементы?

Потому что ты их создал!


"Самопроизвольное создание Перлом элементов массива"
Отправлено GaidukAV , 07-Июл-14 15:52 
>> 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 - ничего не проясняет.

И каким же тогда способом проверить наличие опциональных полей у элемента массива?


"Самопроизвольное создание Перлом элементов массива"
Отправлено Andrey Mitrofanov , 07-Июл-14 16:45 
>>> 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> в гугле.


"Самопроизвольное создание Перлом элементов массива"
Отправлено XAnder , 08-Июл-14 13:26 
> почему в массиве появились новые элементы?

См. http://perldoc.perl.org/perlref.html на предмет "autovivification". А в книге "Intermediate Perl" (у нас вышла под названием "Perl: изучаем глубже") этому целая глава посвящена. Рекомендую.


"Самопроизвольное создание Перлом элементов массива"
Отправлено GaidukAV , 09-Июл-14 12:47 
>> почему в массиве появились новые элементы?
> См. http://perldoc.perl.org/perlref.html на предмет "autovivification".

autovivification !!!
Спасибо, теперь зная "почему оно так" - многое стало понятным.