perl - 如何做哈希引用切片的总和?

标签 perl

我正在尝试获取哈希引用切片的总和,但失败了

#!/usr/bin/env perl

use strict;
use warnings FATAL => 'all';
use feature 'say';
use autodie ':all';
use List::Util 'sum';

my %h = (
    'a' => 1,
    'b' => 2,
    'c' => 3
);

my @letters = ('a','b');
say sum(@h{@letters}); # 1+2 = 3, which is correct
my $h = \%h; # create a reference
#say sum(@{ $h->{ @letters } }); # says "uninitialized value"
#say sum(@{ $h }->{@letters}); # not an array reference
say sum(@h->{@letters}); # @h requires explicit package name
我可以得到散列切片的总和,但不能得到散列引用切片的总和。
我试过的三种方法都没有得到总和,我已经在评论中指出了错误。
如何获得哈希引用切片的总和?

最佳答案

取消引用 $h@ sigil 但用花括号跟随它:

say sum(@{ $h }{ @letters });
如果里面的东西@{...}是一个简单的标量,花括号是可选的。因此,您可以将其缩短为
say sum(@$h{ @letters });
第三种可能的语法是 Postfix Reference Slicing(需要 5.20+):
say sum($h->@{ @letters });

关于perl - 如何做哈希引用切片的总和?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65837342/

相关文章:

python - 文件操作 : Scripting Question

perl - 为现有子动态添加前导下划线

python - base64 和 MIME base 64 有什么区别?

perl - 如何通过 Email::Simple 发送电子邮件?

perl - 在Perl中为文件添加内容时如何跳过行?

perl - WWW::Mechanize->get 错误(不支持 HTTPS)

perl - Selenium::Remote::Driver 捕获错误

perl - 我们在 Perl 中定义的变量和普通全局变量之间有什么区别吗?

perl - 在perl中执行命令时使用管道

mysql - 为什么当我构建 Mysql 查询时我的变量不能正确插入?