📄 command.pm
字号:
package ExtUtils::Command;use 5.005_64;use strict;# use AutoLoader;use Carp;use File::Copy;use File::Compare;use File::Basename;use File::Path qw(rmtree);require Exporter;our(@ISA, @EXPORT, $VERSION);@ISA = qw(Exporter);@EXPORT = qw(cp rm_f rm_rf mv cat eqtime mkpath touch test_f);$VERSION = '1.01';=head1 NAMEExtUtils::Command - utilities to replace common UNIX commands in Makefiles etc.=head1 SYNOPSIS 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 file... perl -MExtUtils::Command -e rm_rf directories... perl -MExtUtils::Command -e mkpath directories... perl -MExtUtils::Command -e eqtime source destination perl -MExtUtils::Command -e chmod mode files... perl -MExtUtils::Command -e test_f file=head1 DESCRIPTIONThe module is used in the Win32 port to replace common UNIX commands.Most commands are wrappers on generic modules File::Path and File::Basename.=over 4=cutsub expand_wildcards{ @ARGV = map(/[\*\?]/ ? glob($_) : $_,@ARGV);}=item cat Concatenates all files mentioned on command line to STDOUT.=cut sub cat (){ expand_wildcards(); print while (<>);}=item eqtime src dstSets modified time of dst to that of src=cut sub eqtime{ my ($src,$dst) = @ARGV; open(F,">$dst"); close(F); utime((stat($src))[8,9],$dst);}=item rm_f files....Removes directories - recursively (even if readonly)=cut sub rm_rf{ rmtree([grep -e $_,expand_wildcards()],0,0);}=item rm_f files....Removes files (even if readonly)=cut sub rm_f{ foreach (expand_wildcards()) { next unless -f $_; next if unlink($_); chmod(0777,$_); next if unlink($_); carp "Cannot delete $_:$!"; }}=item touch files ...Makes files exist, with current timestamp =cut sub touch{ expand_wildcards(); my $t = time; while (@ARGV) { my $file = shift(@ARGV); open(FILE,">>$file") || die "Cannot write $file:$!"; close(FILE); utime($t,$t,$file); }}=item mv source... destinationMoves source to destination.Multiple sources are allowed if destination is an existing directory.=cut sub mv{ my $dst = pop(@ARGV); expand_wildcards(); croak("Too many arguments") if (@ARGV > 1 && ! -d $dst); while (@ARGV) { my $src = shift(@ARGV); move($src,$dst); }}=item cp source... destinationCopies source to destination.Multiple sources are allowed if destination is an existing directory.=cut sub cp{ my $dst = pop(@ARGV); expand_wildcards(); croak("Too many arguments") if (@ARGV > 1 && ! -d $dst); while (@ARGV) { my $src = shift(@ARGV); copy($src,$dst); }}=item chmod mode files...Sets UNIX like permissions 'mode' on all the files.=cut sub chmod{ my $mode = shift(@ARGV); chmod($mode,expand_wildcards()) || die "Cannot chmod ".join(' ',$mode,@ARGV).":$!";}=item mkpath directory...Creates directory, including any parent directories.=cut sub mkpath{ File::Path::mkpath([expand_wildcards()],0,0777);}=item test_f fileTests if a file exists=cut sub test_f{ exit !-f shift(@ARGV);}1;__END__ =back=head1 BUGSShould probably be Auto/Self loaded.=head1 SEE ALSO ExtUtils::MakeMaker, ExtUtils::MM_Unix, ExtUtils::MM_Win32=head1 AUTHORNick Ing-Simmons <F<nick@ni-s.u-net.com>>.=cut
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -