如何从函数返回值中使用Perl keys()?

Eri*_*sum 1 perl hash

我知道Perl keys()函数,并希望在我拥有的哈希上使用它,但是没有看到任何设置变量的理由.让我用代码解释两种方式:

正常:

my %hash = ReturnsHash();
foreach (keys(%hash)) {
    ...code...
}
Run Code Online (Sandbox Code Playgroud)

我喜欢的方式:

foreach (keys(ReturnsHash())) {
    ...code...
}
Run Code Online (Sandbox Code Playgroud)

用第二种方法我得到这个错误信息(Type of arg 1 to keys must be hash or array (not subroutine entry))第二种方式可能吗?如果是这样的话?

ike*_*ami 13

与其名称相反,ReturnsHash不返回哈希值.sub不可能返回哈希值.Subs只能返回标量列表.如果你这样做

sub ReturnsHash {
   my %hash = ( a => 1, b => 2 );
   return %hash;
}
Run Code Online (Sandbox Code Playgroud)

你在做

return 'a', 1, 'b', 2;
Run Code Online (Sandbox Code Playgroud)

既然你做不到

keys('a', 1, 'b', 2)
Run Code Online (Sandbox Code Playgroud)

你不能这样做

keys(ReturnsHash())
Run Code Online (Sandbox Code Playgroud)

现在,您可以做的是返回对哈希的引用

sub ReturnsHashRef {
   my %hash = ( a => 1, b => 2 );
   return \%hash;
}
Run Code Online (Sandbox Code Playgroud)

又名

sub ReturnsHashRef {
   return { a => 1, b => 2 };
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下你可以做到

keys(%{ ReturnsHashRef() })
Run Code Online (Sandbox Code Playgroud)