在清單內容中,傳回 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
表達式用作 while
或 for
迴圈的條件,則會將其隱含指定給 $_
。如果 glob
表達式或將 glob
表達式明確指定給純量的 glob
表達式用作 while
/for
條件,則條件實際上會測試表達式值的定義,而不是其常規真值。
內部實作詳細資料
這是實作 <*.c>
運算子的內部函式,但您可以直接使用它。<*.c>
運算子在 perlop 中的「I/O 運算子」 中有更詳細的說明。
移植性問題:perlport 中的「glob」。