Su sistemi * nix, ho utilizzato quanto segue con buoni risultati.
sub filesExist { return scalar (my @x = `ls -1a 2> /dev/null "$_[0]"`) }
Risponde al numero di risultati trovati o 0 se nessuno. Che lo rende facilmente utilizzato in 'se' condizionali come:
if(!filesExist("/foo/var/not*there.log") &&
!filesExist("/foo/var/*/*.log") &&
!filesExist("/foo/?ar/notthereeither.log"))
{
print "No matches!\n";
} else {
print "Matches found!\n";
}
Esattamente quello che i modelli è possibile utilizzare sarebbero determinate da ciò che i vostri supporti di shell. Ma la maggior parte delle shell supporta l'uso di '*' e '?' - e significano la stessa cosa ovunque io abbia visto. Ovviamente, se si rimuovesse la chiamata alla funzione 'scalare', si restituirebbero le corrispondenze, utili per trovare quei nomi di file variabili.
fonte
2013-09-30 18:32:11
Per essere completo, è possibile eseguire 'foreach (glob (" *. File ")) {something}' allo stesso modo ... – dawg
Ma non riesco a inserire regexp lì. Posso usare le espressioni regolari? – Jean
@alertjean No, dovrai aprire la directory e scansionare manualmente i nomi dei file usando un'espressione regolare. 'glob' supporta solo le tradizionali [shell wild card] (http://www.tuxfiles.org/linuxhelp/wildcards.html). – meagar