爲什麼不使用File::Find模塊?自Perl 5.x以來,它幾乎包含在Perl的所有發行版中。這不是我最喜歡的模塊,因爲它的工作方式很混亂,但它做得很好。
可以定義你想要做的是什麼wanted
子程序,並過濾掉你不想要的東西。在這種情況下,您幾乎可以打印所有內容,因此所有wanted
都會打印出找到的內容。
在File::Find
中,文件的名稱保存在$File::Find::name
中,該文件的目錄在$File::Find::dir
中。 $_
是文件本身,可用於測試。
這裏有你想要的一個基本途徑:
use strict;
use warnings;
use feature qw(say);
use File::Find;
my $directory = `/tmp/test`;
find (\&wanted, $directory);
sub wanted {
say $File::Find::Name;
}
我寧願把我的wanted
功能在我find
子程序,所以他們在一起。這相當於以上內容:
use strict;
use warnings;
use feature qw(say);
use File::Find;
my $directory = `/tmp/test`;
find (
sub {
say $File::Find::Name
},
$directory,
);
好的編程說不打印在子程序中。相反,您應該使用子例程來存儲和返回數據。不幸的是,find
根本沒有返回任何東西。你必須使用一個全球陣列捕捉到的文件列表,後來把它們打印出來:
use strict;
use warnings;
use feature qw(say);
use File::Find;
my $directory = `/tmp/test`;
my @directory_list;
find (
sub {
push @directory_list, $File::Find::Name
}, $directory);
for my $file (@directory_list) {
say $file;
}
或者,如果你喜歡一個獨立的wanted
子程序:
use strict;
use warnings;
use feature qw(say);
use File::Find;
my $directory = `/tmp/test`;
my @directory_list;
find (\&wanted, $directory);
sub wanted {
push @directory_list, $File::Find::Name;
}
for my $file (@directory_list) {
say $file;
}
事實證明我的通緝子程序取決於數組的子程序困擾我這就是爲什麼我喜歡嵌入我的find
調用內部的wanted
子程序,這不是地方。
一兩件事你可以做的是使用你的子程序來篩選出你想要的東西。比方說,你在JPG文件是唯一感興趣的是:
use strict;
use warnings;
use feature qw(say);
use File::Find;
my $directory = `/tmp/test`;
my @directory_list;
find (\&wanted, $directory);
sub wanted {
next unless /\.jpg$/i; #Skip everything that doesn't have .jpg suffix
push @directory_list, $File::Find::Name;
}
for my $file (@directory_list) {
say $file;
}
注意通緝子程序如何做之前我把它放到我@directory_list
陣列我不希望任何文件next
。同樣,我更喜歡嵌入:
find (sub {
next unless /\.jpg$/i; #Skip everything that doesn't have .jpg suffix
push @directory_list, $File::Find::Name;
}
我知道這是不是正是你問什麼,但我只是想讓你知道的Find::File
模塊併爲您介紹Perl模塊(如果你沒有已經瞭解它們)可以爲Perl添加很多功能。
'文件:: Spec' < - 這個模塊有'no_upwards()'FUNC隱藏像'.'或'..'所有目錄。例如:'@paths =文件::規格 - > no_upwards(@paths);' – gaussblurinc 2013-04-05 13:01:53
你應該把一個'使用5.012;'在你的程序,因爲你用'而(READDIR($ DIR)){...}'這在早期版本中不起作用。 – 2013-04-05 14:59:29