Perl:引用散列以传递给另一个例程

标签 perl hash

在上传 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/

相关文章:

perl - 如何使用Net::OpenSSH安全地写入远程文件

perl - 在 perl 中使用 ffmpeg 打印视频时长信息

Perl 命名空间问题 : using exported functions in modules not working

perl - Perl 中的 CHECK、UNITCHECK 和 INIT block 有什么用处?

r - 如何使用字典在r中构造另一个变量?

perl - 什么是我的 Cache::Memcached::Fast $class = shift;在 Perl 中?

Ruby - 基于 1 个键比较/合并 2 个哈希数组

c++ - 未解析的运算符符号,构建用于排序的类

php - password_verify 和 doveadm pw -t 如何在不加盐的情况下验证密码

ruby - 访问不存在的键时的多级哈希默认参数,如 h[1][1] += 1