1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
package Shell::Command;
$VERSION = 0.01;
# This must come first before ExtUtils::Command is loaded to ensure it
# takes effect.
BEGIN {
*CORE::GLOBAL::exit = sub {
CORE::exit(@_) unless caller eq 'ExtUtils::Command';
my $exit = $_[0] || 0;
die "exit: $exit\n";
};
}
use ExtUtils::Command ();
use Exporter;
@ISA = qw(Exporter);
@EXPORT = @ExtUtils::Command::EXPORT;
@EXPORT_OK = @ExtUtils::Command::EXPORT_OK;
use strict;
foreach my $func (@ExtUtils::Command::EXPORT,
@ExtUtils::Command::EXPORT_OK)
{
no strict 'refs';
*{$func} = sub {
local @ARGV = @_;
my $ret;
eval {
$ret = &{'ExtUtils::Command::'.$func};
};
if( $@ =~ /^exit: (\d+)\n$/ ) {
$ret = !$1;
}
elsif( $@ ) {
die $@;
}
else {
$ret = 1 unless defined $ret and length $ret;
}
return $ret;
};
}
1;
=head1 NAME
Shell::Command - Cross-platform functions emulating common shell commands
=head1 SYNOPSIS
use Shell::Command;
mv $old_file, $new_file;
cp $old_file, $new_file;
touch @files;
=head1 DESCRIPTION
Thin wrapper around ExtUtils::Command.
=cut
|