my $prog = shift; eval { sub exit { die "exit $_[0]\n"; } do '$prog' or die "Couldn't run '$prog': $!\n"; }; print "'$prog' results: $@\n"; my $childexit; if (!$@) { $childexit = 0; } elsif ($@ =~ /^exit (\d+)$/) { $childexit = $1; } else { $childexit = 1; } CORE::exit($childexit);