2015-12-22 90 views
6

在下面的代碼,到底是什麼在<*>命令嗎?<*>在Perl中的含義是什麼?

my @usbHddFileList = <*>; 
foreach $usbHddFile (@usbHddFileList) 
{ 
    system("rm -f $curMountDir/$usbHddFile </dev/null> /dev/null 2>&1"); 
} 
+3

另請參見[兩種形式的Perl文件名通配符命令之間的區別](http://stackoverflow.com/questions/12115772/difference-between-two-forms-of-perl-filename-wildcard-command) –

+17

Aside:使用'system(「rm ...」)'來刪除文件是非常糟糕的形式,並且會帶來安全風險(想想名字中帶有$(rm -rf〜)'的文件)。改爲使用'unlink()'。 –

+0

回覆:'「也許搜索引擎不喜歡的特殊字符」'。在谷歌,你可以給特殊字符exampe [此谷歌搜索(https://www.google.no/?gws_rd=ssl# q = perl的+%22-X 22%)未找到文件測試操作,除非你包括surronding報價 –

回答

5
  • <>意味着readline(ARGV)
  • <IDENTIFIER>意味着readline(IDENTIFIER)
  • <$IDENTIFIER>意味着readline($IDENTIFIER)
  • <...>(別的)指glob(qq<...>)

所以<*>意味着glob(qq<*>)glob('*')

glob用於生成多個從一個圖案串或文件名。

在列表上下文中,<*>又名glob('*')返回當前工作目錄中除名稱以.開頭的文件以外的所有文件。

9

這是一個glob。根據perlop

如果角度括號內什麼是既不是文件句柄,也不含有一個文件句柄名 簡單的標量變量,類型團,或 類型團引用,它被解釋爲一個文件名模式是 匹配替換的,並根據上下文返回 列表中的文件名列表或下一個文件名。單獨依據句法理由確定 。

+0

而在OP的代碼,具體地講,在'@usbHddFileList返回當前工作目錄中的所有(非點)文件,並將它們的名字'。 – ThisSuitIsBlackNot