Да, это предполагаемое поведение.Вы набираете get_keys()
, прежде чем назначить %hello
, поэтому %hello
пусто в get_keys()
.(Скаляры инициализируются на undef
, а массивы и хэши по умолчанию устанавливаются пустыми.)
Если вы хотите, чтобы %hello
был немедленно инициализирован, используйте блок BEGIN:
use vars qw/%hello/;
BEGIN {
%hello = ( a => 1, b => 2 );
}
Обратите внимание, что если вы используете my
(или our
, в этом отношении), то это не будет работать:
BEGIN {
my %hello = ( a => 1, b => 2 );
}
, потому что вы должны объявить переменную вне блока, напримеритак:
my %hello;
BEGIN {
%hello = ( a => 1, b => 2 );
}