あなただけしたい場合はそれらを数えれば、ディレクトリを開いていればcontextをreaddirで操作してすべてのエントリのリストを返し、それをスカラーに割り当てることができます。これはあなたにリストの長さを与えます。要素
opendir my $dh, $dir;
my $num_entries =() = readdir($dh);
構造=() =
の数がgoatseオペレータの名の下に行く、it in perlsecretを参照してください。もちろん、以下のように、より明確な方法があります。
特定の種類のファイルを数えたい場合は、まずファイルリストをgrepまで渡します。 grep
はリストコンテキストをその入力に適用するので、readdir
はすべてのファイルのリストを返し、フィルタリング後にgrep
自身がリストを返します。それをスカラーに割り当てると、リストの長さ(要素の数)が得られます。あなたのカウント。たとえば、すべての通常のファイルとreaddir
は、任意のパスなしで、裸のファイル名を返すこと/gfs./
ファイル
use warnings;
use strict;
my $dir = '/home/Enric/gfs-0.5.2016061400';
opendir my $dh, $dir or die "Can't open $dir: $!";
my $num_files = grep { -f "$dir/$_" } readdir($dh);
my $num_gfs = grep { /gfs./ } readdir($dh);
注。ファイルで通常行われていることの大部分は、そのディレクトリに最初にchdir
が付いていない限り、パスの先頭に追加する必要があります。上記のブロックgrep
で行われているので、-f
file test (-X)に正しいファイル名があります。あなたはファイルリスト自体を使用する必要がある場合
は、配列にそれを取得し、スカラーここmap
# Get the file list, then its length
my @files_gfs = map { "$dir/$_" } grep { /gfs./ } readdir($dh);
my $num_gfs = @files_gfs;
各ファイルの完全なパスを構築することを割り当てます。あなたがパスドロップを必要としない場合map { }
。単に代わりにスカラーに配列を割り当てる
my $num_gfs = scalar @files_gfs;
のように、通常のカウントを取得するには、アレイ上scalarの正式な使用のためには必要がないことに注意してください、それはイディオムです(控えめに言って)。
あなたが読んでいるあなたは、ファイルを処理している場合、あなたはreaddir
ここ
my $cnt_gfs = 0;
while (my $filename = readdir($dh)) {
$cnt_gfs++ if $filename =~ /gfs./;
# Process $dir/$filename as needed
}
を行くように数える(その出力はスカラーに割り当てられているので)スカラーコンテキストであり、そしてそれは、ディレクトリを反復処理エントリは1度に1つ返されます。
を使用して、Perlの(おそらくないはずですが)からのbashを呼び出すことができます。警告を使う; 'トップへ。 '$#FILES'はファイル数をカウントする方法の1つですが、配列が0から始まるときには1を追加する必要があります – KeepCalmAndCarryOn
[Perlで配列のサイズを見つける](http://stackoverflow.com/questions)/7406807/find-size-of-an-perlの配列) –
このコードを自分で書いたのですか、それとも他の場所からコピーしましたか?私が尋ねる理由は、多くのことが間違っているからです。チュートリアルのサイトなどからコピーした場合は、将来そのサイトを避けることをおすすめします。 –