0

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);
4

2 に答える 2

0

コードが機能しない主な理由は、別のディレクトリに対して再度dirProcess呼び出すときです。つまり、配列内の残りのファイルが見つからないということです。mainchdir@tmp

それを修正するためにchdir $dir、呼び出しの後に を追加しましたdirProcess。さらに、私は持っています

  • と を追加use strictしましuse warningsた。これらは常にプログラムの先頭に配置する必要があります。

  • pwd不要なすべての呼び出しを削除しました。作業ディレクトリを設定したばかりなので、現在の作業ディレクトリが何であるかを知っています!

  • 不要なchomp通話を削除しました。neverからの情報にglobは末尾の改行がありません。チョッピングが必要だっ1つの弦は$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);
于 2013-04-23T18:23:25.057 に答える