Having done some tests, and it also seems to make perfect sense to me... the 2nd version,
my @slice=@{$href}{'item1','item2'};
Is the only one which seems valid for the purpose at hand. The target is to get a hash slice, which is array (ahem, list) context, so
@{$href} is what places it in that context, dereferencing as an array, to mimic
@hash{'item1','item2'}
${$href} on the other hand attempts to dereference as a scalar, which, in my test, didn't yeild anything but undef:
#!/usr/local/bin/perl
use strict;
my %hash = map { chr(ord('@')+$_) => $_ } (1..26);
my $hashref = \%hash;
my @list = qw/A B L S Z/;
my @slice = @{$hashref}{@list};
my $multi = ${$hashref}{@list};
print '@slice == ['. join(', ', @slice). "]\n";
print "\$multi == '$multi'\n" if defined $multi;
print "\$multi == undef\n" if !defined $multi;
Output:
@slice == [1, 2, 12, 19, 26]
$multi == undef
So it seems only one of these gets the desired result, and thus no ambiguity.