glob EXPR
glob

在清單內容中,傳回 EXPR 值的檔案名稱擴充清單(可能為空),例如 Unix shell Bash 會執行的內容。在純量內容中,glob 會反覆執行此類檔案名稱擴充,當清單用盡時傳回 undef。如果省略 EXPR,則會使用 $_

# List context
my @txt_files  = glob("*.txt");
my @perl_files = glob("*.pl *.pm");

# Scalar context
while (my $file = glob("*.mp3")) {
    # Do stuff
}

Glob 也支援使用 < > 作為分隔符號的備用語法。雖然支援此語法,但建議您改用 glob,因為它更易於閱讀和搜尋。

my @txt_files  = <"*.txt">;

如果您需要不區分大小寫的檔案 glob,可以使用 bsd_glob 模組的 :nocase 參數來達成。

    use File::Glob qw(:globally :nocase);

	my @txt = glob("readme*"); # README readme.txt Readme.md

請注意,glob 會以空白鍵分割其引數,並將每個區段視為獨立的模式。因此,glob("*.c *.h") 會比對所有副檔名為 .c.h 的檔案。表達式 glob(".* *") 會比對目前工作目錄中的所有檔案。如果您想要 glob 可能包含空白鍵的檔案名稱,您必須在包含空白鍵的檔案名稱周圍加上額外的引號來保護它。例如,若要 glob 檔案名稱中包含 e 後接空白鍵後接 f 的檔案,請使用下列其中一種方式:

my @spacies = <"*e f*">;
my @spacies = glob('"*e f*"');
my @spacies = glob(q("*e f*"));

如果您必須透過一個變數,您可以這樣做

my @spacies = glob("'*${var}e f*'");
my @spacies = glob(qq("*${var}e f*"));

如果非空大括號是 glob 中唯一使用的萬用字元,則不會比對到任何檔案名稱,但可能會傳回很多字串。例如,這會產生九個字串,每個字串對應水果和顏色的配對

my @many = glob("{apple,tomato,cherry}={green,yellow,red}");

此運算子使用標準的 File::Glob 擴充套件來實作。有關詳細資訊,請參閱 bsd_glob,包括 bsd_glob,它不會將空白視為模式分隔符號。

如果 glob 表達式用作 whilefor 迴圈的條件,則會將其隱含指定給 $_。如果 glob 表達式或將 glob 表達式明確指定給純量的 glob 表達式用作 while/for 條件,則條件實際上會測試表達式值的定義,而不是其常規真值。

內部實作詳細資料

這是實作 <*.c> 運算子的內部函式,但您可以直接使用它。<*.c> 運算子在 perlop 中的「I/O 運算子」 中有更詳細的說明。

移植性問題:perlport 中的「glob」