W systemach * nix użyłem następujących elementów z dobrymi wynikami.
sub filesExist { return scalar (my @x = `ls -1a 2> /dev/null "$_[0]"`) }
Odpowiada liczbie znalezionych pasujących lub 0, jeśli brak. Dzięki temu można go łatwo zastosować w warunkach "if" takich jak:
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";
}
Dokładnie jakie wzorce można zastosować, będzie zależało od tego, co obsługuje twoja powłoka. Ale większość powłok obsługuje użycie "*" i "?" - i mają na myśli to samo, wszędzie, gdzie widziałem. Oczywiście, jeśli usuniesz wywołanie funkcji "skalarnej", zwróci ona dopasowania - przydatne do znalezienia tych nazw plików zmiennych.
Aby być kompletnym, możesz zrobić 'foreach (glob (" *. File ")) {coś}' również ... – dawg
Ale nie mogę tam wstawić wyrażeń regularnych. Czy mogę używać wyrażeń regularnych? – Jean
@alertjean Nie, będziesz musiał otworzyć katalog i ręcznie skanować nazwy plików za pomocą wyrażeń regularnych. 'glob' obsługuje tylko tradycyjne [powłoki dzikie karty] (http://www.tuxfiles.org/linuxhelp/wildcards.html). – meagar