perl: redirect STDERR of qx()

Viewed 68

Why is standard error not ignored in suspect()?

#!/usr/bin/perl

sub ok {
    return qx{ ( @_ && true ) 2> /dev/null };
}

sub ok2 {
    open(STDERR, ">", "/dev/null");
    return qx{ @_ && true };
}

sub suspect {
    local *STDERR;
    open(STDERR, ">", "/dev/null");
    return qx{ @_ && true };
}

my $cmd = "ls /nosuchfile";
print "Some output = Bad\n";
suspect($cmd);

print "No output = OK\n";
ok($cmd);
ok2($cmd);
0 Answers
Related