В * nix системах, я использовал следующие с хорошими результатами.
sub filesExist { return scalar ( my @x = `ls -1a 2> /dev/null "$_[0]"` ) }
Он отвечает количеством найденных совпадений или 0, если его нет. Это делает его легко используемым в условных выражениях типа if:
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";
}
Какие именно шаблоны вы можете использовать, будет зависеть от того, что поддерживает ваша оболочка. Но большинство оболочек поддерживают использование '*' и '?' - и они имеют в виду то же самое везде, что я видел. Конечно, если вы удалите вызов функции 'scalar', она вернет совпадения - полезно для поиска этих имен файлов переменных.