在Perl中我需要从父目录读取文件到它的最后一个文件,任何子目录都在那里我也需要读取这些文件!所以我在recursive function
的帮助下尝试过类似的东西但是它给出了无限循环所以任何人都可以帮助我!
代码;
sub fileProcess{
(my $file_name)=@_;
print "$file_name it is file\n";
}
sub main{
(my $dir)=@_;
chdir $dir;
my $tmp=`pwd`;
my @tmp =<*>;
chomp(@tmp);
foreach my $item(@tmp){
chomp($item);
if(-d $item){
dirProcess("$tmp/$item");
}else{
fileProcess($item);
}
}
}
sub dirProcess{
(my $file_name)=@_;
print ">>the corresponding dir is $file_name<<";
main($file_name);
}
my $home="../../Desktop";
chdir $home;
my $path=`pwd`;
main($home);
答案 0 :(得分:1)
这是一个将递归搜索的子句:
sub find_files {
my ($dir) = @_;
my (@files, @dirs) = ();
my (@allfiles, @alldirs) = ();
opendir my $dir_handle, $dir or die $!;
while( defined( my $ent = readdir $dir_handle ) ) {
next if $ent =~ /^\.\.?$/;
if( -f "$dir/$ent" ) {
push @files, "$dir/$ent";
} elsif( -d "$dir/$ent" ) {
push @dirs, "$dir/$ent";
}
}
close $dir_handle;
push @allfiles, @{ process_files($_) } for @files;
push @alldirs, @{ find_files($_) } for @dirs;
return \@alldirs;
}
答案 1 :(得分:0)
您的代码无效的主要原因是,当dirProcess
再次调用main
时chdir
到另一个目录。这意味着找不到@tmp
数组中的其余文件。
要解决此问题,我在调用chdir $dir
后刚刚添加了dirProcess
。另外我有
添加了use strict
和use warnings
。你必须始终将这些放在程序的顶部。
删除了对pwd
的所有不必要的电话。你知道你目前的工作目录是因为你刚设置了它!
删除了不必要的chomp
电话。来自glob
的信息从不具有尾随换行符。 所需要的一个字符串是$tmp
,但你没有这样做!
它仍然不是一段非常好的代码,但它确实有效!
use strict;
use warnings;
sub fileProcess {
(my $file_name) = @_;
print "$file_name it is file\n";
}
sub main {
(my $dir) = @_;
chdir $dir;
my @tmp = <*>;
foreach my $item (@tmp) {
if (-d $item) {
dirProcess("$dir/$item");
chdir $dir;
}
else {
fileProcess($item);
}
}
}
sub dirProcess {
(my $file_name) = @_;
print ">>the corresponding dir is $file_name<<\n";
main($file_name);
}
my $home = "../../Desktop";
main($home);