我只是Perl的初学者。我尝试使用以下脚本重命名文件或目录,但它不重命名文件。请帮我确定问题所在。
我正在使用Perl版本5.8.4
#!/usr/bin/perl
use strict;
use warnings;
use File::Copy;
my $dir="/home/hari/perl-s/abc/";
opendir (DIR, $dir);
my @fileList = readdir DIR;
foreach (@fileList){
next if -d;
my $oldname = $_;
print "Newfile after assigning: $_ \n";
s/(^[0-9])(.)//;
print "Newfile: $_ \n";
print "oldname: $oldname \n";
rename ($oldname,$_);
}
答案 0 :(得分:2)
readdir
的返回值只是文件名;它们不包括提供给opendir
的路径。您通常必须手动包含它。
opendir (DIR, $dir);
my @fileList = readdir DIR;
foreach (@fileList){
# $_ is just "filename"
$_ = "$dir/$_"; # now $_ is "/home/hari/perl-s/abc/$filename"
next if -d;
...
}
在Perl中有不止一种方法可以做。在目录中获取文件集的另一种方法是使用glob
函数。 glob
的一个优点是,您可以以这样的方式使用它,以便它返回带有完整路径的文件名,因此有时glob
优于opendir/readdir/closedir
习语:< / p>
my @filelist = glob("$dir/*");
foreach (@filelist) {
# $_ is "/home/hari/perl-s/abc/filename"
...
}