簡體   English   中英

Perl readdir作為一個單行程?

[英]Perl readdir as a one-liner?

截至目前,我知道有兩種方法可以在Perl中打開和讀取目​​錄。 您可以使用opendirreaddirclosedir ,也可以使用glob來獲取目錄的內容。


例:

使用opendirreaddirclosedir

opendir my $dh, $directory;
my @contents = readdir $dh;
closedir $dh;

使用glob

my @contents = <$directory/*>;

我被告知在某些情況下, glob方法可能會產生不可預測的結果(例如,當遇到目錄名中的特殊字符時,它可能在不同的操作系統上采取不同的行為)。

我喜歡的glob方法是它的“快速和骯臟”。 這是一個簡單的界限,它完成了工作,但如果它不能在所有可能引入意外和難以發現的錯誤的情況下工作。

我想知道是否有一種“速記”方式來使用opendirreaddirclosedir方法?

也許像我最近發現的那種在一行中啜飲文件的花哨方法

以下怎么樣?

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM