2015-12-22 3 views
6

Nel seguente codice, cosa fa esattamente il comando <*>?Che cosa significa <*> in Perl?

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

Vedere anche [Differenza tra due forme di comando jolly Perl nome file] (http://stackoverflow.com/questions/12115772/difference-between-two-forms-of-perl-filename-wildcard-command) –

+17

A parte: L'uso di 'system (" rm ... ")' per eliminare i file è ** estremamente ** cattivo formato, e incorre in rischi per la sicurezza (si pensi a un file con '$ (rm -rf ~)' nel suo nome). Usa invece 'unlink()'. –

+0

Ri: '" forse ai motori di ricerca non piacciono i caratteri speciali "' .. In google puoi citare caratteri speciali per exampe [questa ricerca di google] (https://www.google.no/?gws_rd=ssl# q = perl +% 22-x% 22) non trova il file test operator a meno che non includi le virgolette che si trovano –

risposta

5
  • <> significa readline(ARGV)
  • <IDENTIFIER> significa readline(IDENTIFIER)
  • <$IDENTIFIER> significa readline($IDENTIFIER)
  • <...> (altro) significa glob(qq<...>)

Così <*> significa glob(qq<*>) o glob('*').

glob viene utilizzato per generare un numero di stringhe o nomi di file da un motivo.

In contesto elenco, <*> aka glob('*') restituisce tutti i file nella directory di lavoro corrente diversi da quelli il cui nome inizia con ..

9

È un glob. Secondo perlop:

Se ciò che è all'interno delle parentesi angolari è né un filehandle nè una semplice variabile scalare contenente un nome filehandle, typeglob, o typeglob riferimento, viene interpretato come schema di nome essere globbed, e viene restituito un elenco di nomi di file o il nome file successivo nell'elenco , a seconda del contesto. Questa distinzione è determinata solo per motivi sintattici.

+0

E nel codice OP in particolare, restituisce i nomi di tutti i file (senza punti) nella directory di lavoro corrente e li memorizza in '@usbHddFileList '. – ThisSuitIsBlackNot