@ARGV = ('--restart', Data::Dumper::Dumper(\%whatever)); exec( $^X, $0, @ARGV ); RESUME: #only if you really need to! #### if ($ARV[0] eq '--restart') { %whatever = %{ eval $ARGV[1] }; goto RESUME; #only if you really need to! }