use warnings; use strict; use feature qw/say/; my %bighash; { my $sz = 1_000_000; my $v = 'aaaaaaaaaaaaaa'; $bighash{$v++} = int(rand($sz))+1 for 1..$sz; } my @keys = keys %bighash; delete $bighash{aaaaaaaaaaaaab}; my %slice; say `ps -orss $$`=~s/\s+/ /gr; #%slice = map { $_ => $bighash{$_} } @keys; #@slice{@keys} = @bighash{@keys}; #%slice = %bighash{@keys}; $slice{$_} = $bighash{$_} for @keys; die if defined $slice{aaaaaaaaaaaaab}; # verify the slice die unless $slice{aaaaaaaaaaaaaa}>0 && $slice{aaaaaaaaaaaaaa}==$bighash{aaaaaaaaaaaaaa}; say `ps -orss $$`=~s/\s+/ /gr;