in reply to Defining an anonymous hash with slices and lists.

You're duplicating the qw/ one two three / in your own code. If you store this, you can obviate the need to store a hashref.
my @keys = qw/ one two three /; foreach (@keys) { print ${{do{ local @_ = (@keys => 1 .. 3); map { $_[$_] => $_[$_+@keys] } 0 .. $#keys }}}{$_},"\n"; }

Makeshifts last the longest.