ВСЕГДА используйте use strict;
. Это бы нашло вашу проблему. (Global symbol "$hash1" requires explicit package name
)
ВСЕГДА используйте use warnings qw( all );
. Это бы нашло вашу проблему. (Use of uninitialized value in hash element
)
Ваш код использует значение переменной $hash1
в качестве ключа. Поскольку вы никогда ничего не назначали для $hash1
, это значение равно undef
, которое преобразуется в пустую строку. Это означает, что
$name = join '', 'hash', $number;
$number++;
$clauses{$$name} = [ @somearray ];
эквивалентно
$number++;
$clauses{""} = [ @somearray ];
Просто замените $$name
(значение переменной с именем $name
) на $name
(значение $name
).
$name = join '', 'hash', $number;
$number++;
$clauses{$name} = [ @somearray ];
Очищено:
my $name = 'hash' . $number++;
$clauses{$name} = [ @somearray ];
Но почему вы не используете массив?
push @clauses, [ @somearray ];