package ExtUtils
::Command
;
use File
::Path
qw(rmtree);
use vars
qw(@ISA @EXPORT @EXPORT_OK $VERSION);
@EXPORT = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f chmod
my $Is_VMS = $^O
eq 'VMS';
ExtUtils::Command - utilities to replace common UNIX commands in Makefiles etc.
perl -MExtUtils::Command -e cat files... > destination
perl -MExtUtils::Command -e mv source... destination
perl -MExtUtils::Command -e cp source... destination
perl -MExtUtils::Command -e touch files...
perl -MExtUtils::Command -e rm_f files...
perl -MExtUtils::Command -e rm_rf directories...
perl -MExtUtils::Command -e mkpath directories...
perl -MExtUtils::Command -e eqtime source destination
perl -MExtUtils::Command -e test_f file
perl -MExtUtils::Command -e chmod mode files...
The module is used to replace common UNIX commands. In all cases the
functions work from @ARGV rather than taking arguments. This makes
them easier to deal with in Makefiles.
perl -MExtUtils::Command -e some_command some files to work on
perl -MExtUtils::Command -e 'some_command qw(some files to work on)'
Filenames with * and ? will be glob expanded.
# VMS uses % instead of ? to mean "one character"
my $wild_regex = $Is_VMS ?
'*%' : '*?';
@ARGV = map(/[$wild_regex]/o ?
glob($_) : $_,@ARGV);
Concatenates all files mentioned on command line to STDOUT.
Sets modified time of dst to that of src
local @ARGV = ($dst); touch
(); # in case $dst doesn't exist
utime((stat($src))[8,9],$dst);
Removes directories - recursively (even if readonly)
rmtree
([grep -e
$_,@ARGV],0,0);
Removes files (even if readonly)
foreach my $file (@ARGV) {
carp
"Cannot delete $file: $!";
$delete_count++ while unlink $file;
$files_unlinked++ if $delete_count;
Makes files exist, with current timestamp
foreach my $file (@ARGV) {
open(FILE
,">>$file") || die "Cannot write $file:$!";
=item mv source... destination
Moves source to destination. Multiple sources are allowed if
destination is an existing directory.
Returns true if all moves succeeded, false otherwise.
croak
("Too many arguments") if (@src > 1 && ! -d
$dst);
$nok ||= !move
($src,$dst);
=item cp source... destination
Copies source to destination. Multiple sources are allowed if
destination is an existing directory.
Returns true if all copies succeeded, false otherwise.
croak
("Too many arguments") if (@src > 1 && ! -d
$dst);
$nok ||= !copy
($src,$dst);
=item chmod mode files...
Sets UNIX like permissions 'mode' on all the files. e.g. 0666
foreach my $idx (0..$#ARGV) {
# chmod 0777, [.foo.bar] doesn't work on VMS, you have to do
# chmod 0777, [.foo]bar.dir
my @dirs = File
::Spec
->splitdir( $path );
$path = File
::Spec
->catfile(@dirs);
chmod(oct $mode,@ARGV) || die "Cannot chmod ".join(' ',$mode,@ARGV).":$!";
=item mkpath directory...
Creates directory, including any parent directories.
File
::Path
::mkpath
([@ARGV],0,0777);
Converts DOS and OS/2 linefeeds to Unix style recursively.
my $temp = '.dos2unix_tmp';
open ORIG
, $_ or do { warn "dos2unix can't open $_: $!"; return };
do { warn "dos2unix can't create .dos2unix_tmp: $!"; return };
while (my $line = <ORIG
>) {
$line =~ s/\015\012/\012/g;
Should probably be Auto/Self loaded.
ExtUtils::MakeMaker, ExtUtils::MM_Unix, ExtUtils::MM_Win32
Nick Ing-Simmons C<ni-s@cpan.org>
Currently maintained by Michael G Schwern C<schwern@pobox.com>.