Поскольку мю слишком коротко, вы упомянули, что вы использовали массив в скалярном контексте, и поэтому он возвратил его длину вместо своих элементов.У меня есть несколько других указателей на ваш код.
Передача аргументов по ссылке иногда является хорошей идеей, когда некоторые из этих аргументов являются массивами или хэшами.Причина этого в том, что массивы и хэши передаются в списки перед передачей в подпрограмму, что делает невозможным что-то подобное:
foo(@bar, @baz);
sub foo { # This will not work
my (@array1, @array2) = @_; # All the arguments will end up in @array1
...
}
Однако это будет работать:
foo(\@bar, \@baz);
sub foo {
my ($aref1, $aref2) = @_;
...
}
Вы можете обнаружить, что в вашем случае each
- хорошая функция для ваших целей, так как она сделает разыменование массива немного точнее.
foo("test", \%hash); # note the backslash to pass by reference
sub foo {
my ($test, $aa) = @_; # note use of scalar $aa to store the reference
while (my ($key, $value) = each %$aa)) { # note dereferencing of $aa
print "$key is @$value\n"; # ...and $value
}
}