我正在嘗試使用 glob 在目錄中匹配“program.log”或“program.log.gz”或兩者,但 glob 將兩個字串都回傳給 @array,無論它們中是否存在任何一個。
我做了
@array = glob ("$dir/program.{log,log.gz}");
現在@array 包含
$dir/program.log
$dir/program.log.gz
不管它們是否真的存在。
似乎 glob 只是擴展字串并將其傳遞給@array,無論檔案是否實際存在。這是 glob 的預期行為嗎?如果是這樣,我如何只將存在的檔案名傳遞給@array?
uj5u.com熱心網友回復:
這是記錄在案的行為glob:
如果非空大括號是 glob 中唯一使用的通配符,則不會匹配任何檔案名,但可能會回傳許多字串。例如,這會產生九個字串,每個水果和顏色配對一個:
my @many = glob "{apple,tomato,cherry}={green,yellow,red}";
如果只想將現有檔案傳遞給陣列,則可以使用grep和檔案測驗,例如-e(exists)
my @files = grep -e, glob ("$dir/program.{log,log.gz}");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/378826.html
標籤:perl
