1

内のファイルを探してsubdirectories、ディレクトリからすべてを反復処理する手順を実装しようとしています。root.xmlPerl

sub getXMLFiles {

    my $current_dir = $_[ 0 ];
    opendir my $dir, $current_dir or die "Cannot open directory: $!\n";
    my @files = grep /\.xml$/i, readdir $dir;
    closedir $dir;

    return @files;
}

sub iterateDir {
    my $current_dir = $_[ 0 ];
    finddepth( \&wanted, $current_dir );
    sub wanted{ print getXMLFiles }
}
#########################################################
#                                                       #
# define the main subroutine.                           #
# first, it figures from where it is being ran          #
# then recursively iterates over all the subdirectories #
# looking for .xml files to be reformatted              #
#                                                       #
#########################################################
sub main(){
    #
    # get the current directory in which is the 
    # program running on
    #
    my $current_dir = getcwd;
    iterateDir( $current_dir );
}

#########################################################
#                                                       #
# call the main function of the program                 #
#                                                       #
#########################################################
main();

私はあまり詳しくありませんPerl。この手順は、ファイルをフィルタリングして返すsub iterateDir間、サブディレクトリを反復処理することになっています。これらのファイルを解析に使用します。そのため、ディレクトリからすべてのファイルを見つけようとしています。ただし、内部の手順を使用してtoに送信する方法がわかりません。どうすればそれを達成できますか?getXMLFiles.xml.xml.xmlrootsub wantediterateDirdirpathgetXMLFiles

4

2 に答える 2

1

$File::Find::dir現在のディレクトリ名です。その変数をサブで使用して、wanted呼び出すサブに渡すことができます。必要な関数の詳細については、ドキュメントを参照してください

これはうまくいくはずです:

sub iterateDir {
    my $current_dir = $_[ 0 ];
    finddepth( \&wanted, $current_dir );
    #                                    |
    # pass current dir to getXMLFiles    V
    sub wanted{ print getXMLFiles($File::Find::dir) }
}
于 2012-08-23T13:44:41.023 に答える
0

別の方法...

use warnings;
use strict;
use File::Find;
use Cwd;

my $current_dir = getcwd();
my @files;
find(
    {
        wanted => sub { push @files, $_ if -f $_ and /\.xml$/i },
        no_chdir => 1,
    },
    $current_dir
);
于 2012-08-23T13:50:31.687 に答える