Я хочу вернуть несколько значений из подпрограммы perl и назначить их массово.
Это работает некоторое время, но не тогда, когда одним из значений является undef
:
sub return_many {
my $val = 'hmm';
my $otherval = 'zap';
#$otherval = undef;
my @arr = ( 'a1', 'a2' );
return ( $val, $otherval, @arr );
}
my ($val, $otherval, @arr) = return_many();
Perl, кажется, объединяет значения, игнорируя элементы undef.Я ожидаю разрушить присваивание, как в Python или OCaml.
Есть ли простой способ присвоить возвращаемое значение нескольким переменным?
Редактировать: вот способ, которым я сейчас пользуюсьпередать структурированные данные вокруг.Массив @a должен передаваться по ссылке, как предложил MkV.
use warnings;
use strict;
use Data::Dumper;
sub ret_hash {
my @a = (1, 2);
return (
's' => 5,
'a' => \@a,
);
}
my %h = ret_hash();
my ($s, $a_ref) = @h{'s', 'a'};
my @a = @$a_ref;
print STDERR Dumper([$s, \@a]);