in reply to close and autodie on pipes

If you want to catch exceptions, use eval:
my $result = eval { close $fh }; unless ($result) { print "Got an error: $@\n"; }
Or even:
my $result = eval { open my $fh, '-|', 'bash -c "echo Hello; exit 1"'; print for <$fh>; close $fh; }; ...