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?
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 });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With