in reply to trap warnings in $@

Why use eval here? To simply run a command and check its return code, I would use something like:

my $out = `$command`; # $out contains the command stdout my $rc = $? >> 8; # $rc contains command return code