我知道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)