在上传 Excel 电子表格的代码中,它为我提供了数组 ref 中的数据:
for( @{$listref} ){...
我使用 $_->{'whateverthehashkeyis'}
访问它,没有任何问题。
我需要做的是将当前循环迭代中访问的哈希传递给另一个子例程。
这就是我遇到问题的地方。我尝试过不同的方法,但没有成功。
这不起作用,但它应该是我需要做的示例
%args = @{$_};
$results = &format_trading_card_preview_item(\%args);
....
sub format_trading_card_preview_item
{
my %args = shift;
我认为我需要做的是取消引用哈希以将其发送出去。是对的吗?
预先感谢您的帮助
最佳答案
看起来$listref
是对哈希引用数组的引用。
如果您需要使用保存哈希引用的变量,那么最好为该变量命名,而不是使用默认标量 $_
取消引用哈希并将其复制到 %args
也是没有意义的,只是获取对该哈希的引用并将其作为参数传递给子例程
使用与号 &
字符调用子例程是错误的,自从十七年前 Perl v5.5 发布以来一直如此
你的循环应该是这样的
for my $item ( @$listref ) {
format_trading_card_preview_item($item);
}
在子例程中,这在很大程度上取决于您想要对传入的哈希执行什么操作,但您对此没有说什么,因此最好将其保留为引用并编写
sub format_trading_card_preview_item {
my ($item) = @_;
...
}
或者您可以使用 for
的语句修饰符形式,如下所示
format_trading_card_preview_item($_) for @$listref;
关于Perl:引用散列以传递给另一个例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34439203/