Назначение нескольких значений в Perl, проблемы с undef
Вопрос
Я хочу вернуть несколько значений из подпрограммы Perl и назначить их навалом.
Это работает некоторое время, но не когда один из значений генеракодицетагCode:
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]);
. Решение
Не уверены, что вы подразумеваете под Concatenation здесь:
use Data::Dumper;
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();
print Dumper([$val, $otherval, \@arr]);
.
Отпечатки
$VAR1 = [
'hmm',
'zap',
[
'a1',
'a2'
]
];
.
Пока:
use Data::Dumper;
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();
print Dumper([$val, $otherval, \@arr]);
.
Печать:
$VAR1 = [
'hmm',
undef,
[
'a1',
'a2'
]
];
.
Одиночная разница, являющаяся тем, что $ indval теперь undef вместо «ZAP».
Не связан с StackOverflow