use strict; use warnings; my %hash = ( foo => "bar", bar => "baz" ); sub testAndExec { my $cond = shift; if (eval $cond) { print "This is executed!\n"; } else { print "Not executing this time.\n"; } print "But there was an error:\n $@" if $@; print "\n"; } my $exeif = "!exist $hash{foo}"; print "Double quotes, existing key: <$exeif>\n"; testAndExec $exeif; $exeif = "!exist $hash{foo}"; print "Double quotes, existing key: <$exeif>\n"; testAndExec $exeif; $exeif = '!exists $hash{bar}'; print "Single quotes, existing key: <$exeif>\n"; testAndExec $exeif; $exeif = '!exists $hash{baz}'; print "Single quotes, non-existing key: <$exeif>\n"; testAndExec $exeif;