use strict; use warnings; my %foo = ( BAZ => 1 ); sub see_args { }; warn sprintf "at start: BAR '%s'\n", ! exists $foo{BAR} ? '' : ! defined $foo{BAR} ? '' : $foo{BAR}; # see_args( @foo{qw(BAR BAZ)} ); my @a = @foo{qw(BAR BAZ)}; warn sprintf "at end: BAR '%s'\n", ! exists $foo{BAR} ? '' : ! defined $foo{BAR} ? '' : $foo{BAR};