如何做散列参考切片的总和?
How to do sum of hash reference slice?
我正在尝试获取哈希参考切片的总和,但我失败了
#!/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
与 @
标记的引用,但在它后面加上花括号:
say sum(@{ $h }{ @letters });
如果@{...}
里面的东西是一个简单的标量,花括号是可选的。因此,您可以将其缩短为
say sum(@$h{ @letters });
第三种可能的语法是后缀引用切片(需要 5.20+):
say sum($h->@{ @letters });
我正在尝试获取哈希参考切片的总和,但我失败了
#!/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
与 @
标记的引用,但在它后面加上花括号:
say sum(@{ $h }{ @letters });
如果@{...}
里面的东西是一个简单的标量,花括号是可选的。因此,您可以将其缩短为
say sum(@$h{ @letters });
第三种可能的语法是后缀引用切片(需要 5.20+):
say sum($h->@{ @letters });