gpt4 book ai didi

perl - 在 perl 中分配多个值,undef 有问题

转载 作者:行者123 更新时间:2023-12-02 07:51:57 25 4
gpt4 key购买 nike

我想从 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 中那样解构赋值。

有没有一种简单的方法可以将返回值分配给多个变量?

编辑:这是我现在用来传递结构化数据的方式。正如 MkV 所建议的,@a 数组需要通过引用传递。

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'。

关于perl - 在 perl 中分配多个值,undef 有问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3271658/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com