require Exporter;
use vars qw(@ISA @EXPORT @EXPORT_OK $VERSION);
@ISA = qw(Exporter);
-@EXPORT = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f chmod
+@EXPORT = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f test_d chmod
dos2unix);
-$VERSION = '1.06';
+$VERSION = '1.11';
my $Is_VMS = $^O eq 'VMS';
perl -MExtUtils::Command -e mkpath directories...
perl -MExtUtils::Command -e eqtime source destination
perl -MExtUtils::Command -e test_f file
+ perl -MExtUtils::Command -e test_d directory
perl -MExtUtils::Command -e chmod mode files...
...
=cut
-sub rm_f
-{
- expand_wildcards();
- foreach (@ARGV)
- {
- next unless -f $_;
- next if unlink($_);
- chmod(0777,$_);
- next if unlink($_);
- carp "Cannot delete $_:$!";
- }
+sub rm_f {
+ expand_wildcards();
+
+ foreach my $file (@ARGV) {
+ next unless -f $file;
+
+ next if _unlink($file);
+
+ chmod(0777, $file);
+
+ next if _unlink($file);
+
+ carp "Cannot delete $file: $!";
+ }
+}
+
+sub _unlink {
+ my $files_unlinked = 0;
+ foreach my $file (@_) {
+ my $delete_count = 0;
+ $delete_count++ while unlink $file;
+ $files_unlinked++ if $delete_count;
+ }
+ return $files_unlinked;
}
+
=item touch files ...
Makes files exist, with current timestamp
local @ARGV = @ARGV;
my $mode = shift(@ARGV);
expand_wildcards();
+
+ if( $Is_VMS ) {
+ foreach my $idx (0..$#ARGV) {
+ my $path = $ARGV[$idx];
+ next unless -d $path;
+
+ # chmod 0777, [.foo.bar] doesn't work on VMS, you have to do
+ # chmod 0777, [.foo]bar.dir
+ my @dirs = File::Spec->splitdir( $path );
+ $dirs[-1] .= '.dir';
+ $path = File::Spec->catfile(@dirs);
+
+ $ARGV[$idx] = $path;
+ }
+ }
+
chmod(oct $mode,@ARGV) || die "Cannot chmod ".join(' ',$mode,@ARGV).":$!";
}
exit !-f $ARGV[0];
}
+=item test_d directory
+
+Tests if a directory exists
+
+=cut
+
+sub test_d
+{
+ exit !-d $ARGV[0];
+}
+
=item dos2unix
Converts DOS and OS/2 linefeeds to Unix style recursively.
sub dos2unix {
require File::Find;
File::Find::find(sub {
- return if -d $_;
+ return if -d;
return unless -w _;
+ return unless -r _;
return if -B _;
- local @ARGV = $_;
- local $^I = '';
local $\;
- while (<>) {
- s/\015\012/\012/g;
- print;
+ my $orig = $_;
+ my $temp = '.dos2unix_tmp';
+ open ORIG, $_ or do { warn "dos2unix can't open $_: $!"; return };
+ open TEMP, ">$temp" or
+ do { warn "dos2unix can't create .dos2unix_tmp: $!"; return };
+ while (my $line = <ORIG>) {
+ $line =~ s/\015\012/\012/g;
+ print TEMP $line;
}
+ close ORIG;
+ close TEMP;
+ rename $temp, $orig;
}, @ARGV);
}
Nick Ing-Simmons C<ni-s@cpan.org>
-Currently maintained by Michael G Schwern C<schwern@pobox.com>.
+Maintained by Michael G Schwern C<schwern@pobox.com> within the
+ExtUtils-MakeMaker package and, as a separate CPAN package, by
+Randy Kobes C<r.kobes@uwinnipeg.ca>.
=cut