0

配列内の要素の数を見つけるためにPerlでプログラムを書こうとしています。.txt(この配列は、現在のディレクトリに ""拡張子が付いたファイルで構成されているはずです。次に、この配列を使用してすべての " .txt"ファイルをハッシュに読み込む予定です。)ただし、配列サイズ=0を取得し続けます。Iディレクトリに8つ以上の""ファイルがあることを知っている.txtので、8つ以上の配列要素がありませんか?

私のプログラムは次のとおりです。

    #!/user/bin/perl
    my $readfdir = '.';
    opendir(DIR, $readfdir) or die $!;
    my @readf = glob(".*.txt");
    my $arrSize = @readf;
    print "array size = $arrSize\n";
4

4 に答える 4

5

あなたのグロブはおそらくあなたが思っているものではありません

my @readf = glob(".*.txt");

正規表現構文のように見えるものを使用しています。つまり.*、任意の文字列に一致しますが、グロブでは、つまりです*。したがって、次のようになります。

my @readf = glob("*.txt");

また、代わりにglobを使用する場合、opendirステートメントは非常に冗長です。opendir/readdirまたはglobのいずれかを使用します。

于 2013-03-15T15:30:35.723 に答える
1
glob(".*.txt");

あなたは「。」を持っています ファイル名の先頭に、その名前のファイルがディレクトリ内にあることを確認しますか?

于 2013-03-15T15:30:02.883 に答える
0

globの仕様を変更します。

use warnings;
use strict;

my @readf = glob("*.txt");
my $arrSize = @readf;
print "array size = $arrSize\n";

opendirまた、との両方は必要ありませんglob

于 2013-03-15T15:30:17.580 に答える
0

を使用しない場合の解決策は次のとおり globです。

my $dir = ".";
my @list_of_files;

opendir(my $dh, $dir) or die "$!";
for my $file (readdir $dh){
    push(@list_of_files, $file) if
        $file =~ /\.txt$/;
}

print join(' ', @list_of_files), "\n";
print "Number of files: ", scalar(@list_of_files), "\n";

また、readdirあなたの例では必要ないと思います。例えば。あなたはただすることができますglob

この例では、指定されたディレクトリでtxtファイルをスキャンするだけです。与えられたディレクトリの「下」にあるすべてのものを見つけたいのなら、それFile::Findは素晴らしいことです。

于 2013-03-15T15:46:14.870 に答える