题
我想从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]);
解决方案
不知道你在这里的连接是什么意思:
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'
]
];
唯一的区别是$otherval现在是undef而不是'zap'。
不隶属于 StackOverflow