How to do sum of hash reference slice?

ぃ、小莉子 提交于 2021-02-08 14:54:33

问题


I'm trying to get a sum of a hash reference slice, but I am failing

#!/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

I can get the sum of the hash slice, but not the sum of a slice of a hash reference.

All three methods that I've tried have failed to get the sum, and I've indicated the errors in the comments.

How can I get the sum of a hash reference slice?


回答1:


Dereference the $h with the @ sigil but follow it with a curly brace:

say sum(@{ $h }{ @letters });

If the thing inside the @{...} is a simple scalar, the curly braces are optional. So, you can shorten it to

say sum(@$h{ @letters });

The third possible syntax is the Postfix Reference Slicing (needs 5.20+):

say sum($h->@{ @letters });


来源:https://stackoverflow.com/questions/65837342/how-to-do-sum-of-hash-reference-slice

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!