The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!/usr/bin/perl -w
use strict;

use constant NO_SUCH_FILE => 'this_file_had_so_better_not_be_here';

use Test::More;

BEGIN {

    require Fatal;

    eval { require IPC::System::Simple; };
    plan skip_all => 'IPC::System::Simple not installed' if ($@);

    if ($IPC::System::Simple::VERSION < Fatal::MIN_IPC_SYS_SIMPLE_VER()) {
	plan skip_all => 'IPC::System::Simple version is too low';
    }
}

plan tests => 9;

eval {
    use autodie qw(system);

    system($^X,'-e1');
};

ok($? == 0, "system completed successfully");

ok(!$@,"system returning 0 is considered fine.") or diag $@;

eval {
    use autodie qw(system);

    system(NO_SUCH_FILE, "foo");
};

ok($@, "Exception thrown");
isa_ok($@, "autodie::exception") or diag $@;
like($@,qr{failed to start}, "Reason for failure given");
like($@,qr{@{[NO_SUCH_FILE]}},"Failed command given");

# The error should report *this* file.  See RT #38066
like($@,qr{at (?:t/)?system.t line \d});

eval "system { \$^X} 'perl', '-e1'";
is($@,"","Exotic system in same package not harmed");

package Bar;

system { $^X } 'perl','-e1';
::ok(1,"Exotic system in other package not harmed");