【发布时间】:2015-11-04 02:27:33
【问题描述】:
如何根据用户的需要从子例程返回散列或数组?
基本上我想要一个子例程,当被要求返回哈希时,它将返回一个哈希,但当被要求返回一个数组时,它将返回一个包含该哈希键的数组。
例如:
my %hash = foo();
my @array = foo(); # @array contains "keys %hash"
# pseudo code
sub foo {
# Define a hash
my %hash = (
'key1' => 'val1',
'key2' => 'val2',
'key3' => 'val3',
);
# I know this is not valid Perl code, but it represents what I want.
return keys %hash if wantarray;
return %hash if wanthash;
}
我知道您可以使用wantarray 来确定是要返回数组还是标量,但我需要一个类似的功能来选择性地返回数组或哈希。
【问题讨论】:
-
我认为 Perl 中没有“数组上下文”之类的东西:它是 list、标量或空上下文。为什么需要这样的功能?
-
不过,您可能会对 Want 模块感兴趣。
-
始终返回 \%hash 并让调用者执行
my @array = keys %{ foo() }或my %hash = %{ foo() }(或者更好的是,只需my $hasherf = foo()) -
正如@raina77ow 所说,wantarray 名称错误;它只告诉你有列表上下文
-
顺便问一下,有没有人只是随意地四处对 Perl 问题投反对票?在我发布这个问题的那一刻,那个'-1'就被打了......我怀疑做它的人甚至有时间阅读它。
标签: arrays perl hash subroutine