my $method1 = '(($a && $b)) || ($c && $d)'; my $method2 = sub { my ($a,$b,$c,$d) = @_; (( $a && $b )) || ($c && $d) }; }; sub method3 { ... } print "yeah\n" if eval $method1; die $@ if $@; print "yeah\n" if $method2->($a,$b,$c,$d); print "yeah\n" if method3(...);