Раз уж пошла такая
пьянкаPerl странно ведет себя в некоторых случаях со ссылками )
Например, определяем переменную
my $D = undef;
Если к этой переменной обратиться как к ссылке на хеш, то переменная автоматически станет хешем :)
warn $D->{'key'};
Т.е. все как надо :) При этом ключ key создан не будет. Тоже правильно. Теперь $D == {} (образно выражаясь ;) )
НО! Если мы объявим процедуру
my $D = undef;
sub D {$D}
И обратимся к ней как к left value
warn D->{'key'};
То получим облом в виде Can't use an undefined value as a HASH reference :)
Причем если в $D будет лежать ссылка на хеш и мы сделаем
D->{'key'} = 'foo';
то все отработает как надо :)
Фокус же
my $D = undef;
$D->{'key'} = 'foo';
проходит на ура!
Век живи, век учись, дураком помрешь ;)