[英]Perl readdir as a one-liner?
截至目前,我知道有兩種方法可以在Perl中打開和讀取目錄。 您可以使用opendir
, readdir
和closedir
,也可以使用glob
來獲取目錄的內容。
例:
使用opendir
, readdir
和closedir
:
opendir my $dh, $directory;
my @contents = readdir $dh;
closedir $dh;
使用glob
:
my @contents = <$directory/*>;
我被告知在某些情況下, glob
方法可能會產生不可預測的結果(例如,當遇到目錄名中的特殊字符時,它可能在不同的操作系統上采取不同的行為)。
我喜歡的glob
方法是它的“快速和骯臟”。 這是一個簡單的界限,它完成了工作,但如果它不能在所有可能引入意外和難以發現的錯誤的情況下工作。
我想知道是否有一種“速記”方式來使用
opendir
,readdir
,closedir
方法?
也許像我最近發現的那種在一行中啜飲文件的花哨方法 。
以下怎么樣?
my @contents = get_dir_contents($dir);
你甚至可以決定如何處理錯誤.
應該返回,如果..
應該返回,是否應該返回“隱藏”文件以及路徑是否預先添加到文件名中,因為您自己編寫了get_dir_contents
。
備擇方案:
use File::Find::Rule qw( ); my @contents = File::Find::Rule->maxdepth(1)->in($dir);
use File::Slurp qw( read_dir ); my @contents = read_dir($dir);
# Unix only, but that includes cygwin and OS/X. my @contents = <\\Q$dir\\E/.* \\Q$dir\\E/*>;
我相信我已經提出了一個涉及opendir
/ readdir
的有效單readdir
!
my @contents = do { opendir my $dh, $dir or die $!; readdir $dh };
這應該打開並讀取目錄,返回其所有內容,一旦do
塊結束, $dh
應該由Perl“自動”關閉。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.