2015-12-22 1 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

Кроме того: Использование 'system (" rm ... ")' для удаления файлов ** крайне ** плохой формы и подвержено рискам безопасности (подумайте о файле с '$ (rm -rf ~)' в его имени). Вместо этого используйте 'unlink()'. –

+0

Re: '« возможно, поисковым машинам не нравятся специальные символы ». .. В Google вы можете процитировать специальные символы для примера [этот поиск google] (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 Используется для создания нескольких строк или имен файлов из шаблона.

В контексте списка <*> aka glob('*') возвращает все файлы в текущей рабочей директории, отличной от тех, чье имя начинается с ..

9

Это glob. По perlop:

Если что в угловых скобках не является ни указатель_на_файл, ни простой скалярной переменной, содержащей ссылку на файл имя, тип-глобу или тип-глобу ссылка, это интерпретируется как шаблон имени файла, чтобы быть globbed, и в зависимости от контекста возвращается список имен файлов или следующее имя файла в списке . Это различие определяется только на синтаксических основаниях.

+0

И в частности, в коде OP он возвращает имена всех (неточечных) файлов в текущем рабочем каталоге и сохраняет их в '@usbHddFileList '. – ThisSuitIsBlackNot

Смежные вопросы