O recurso que você está procurando é manipulado pelo shell. É chamado de expansão do nome do caminho . Por exemplo, suponha que você esteja em um diretório que contenha os arquivos file1 file2 file3 .. file50. Você pode especificar todos os arquivos no diretório que começam com file
como um argumento para o seu script perl via:
./perl_script.pl file*
Para o shell, *
significa zero ou movimento de qualquer caractere. O shell procura todos os arquivos cujos nomes começam com file
e são seguidos por zero ou mais de qualquer caractere. Além disso, se você quiser especificar todos os arquivos do diretório atual:
./perl_script.pl *
Se você quiser especificar todos os arquivos em algum outro diretório, use:
./perl_script.pl /some/other/dir/*
Observe que esse é um recurso de shell, não um recurso de perl. O shell faz a expansão do nome do caminho antes da lista de argumentos ser passada para o perl. Conseqüentemente, funcionará qualquer comando shell. Se você quiser testar a expansão do nome do caminho sem realmente executar o script perl, você pode simplesmente usar o echo:
echo /some/other/dir/*
Isso mostrará os mesmos resultados da expansão do nome do caminho que o script perl verá.
Casos especiais
Por padrão, se não houver um arquivo que corresponda ao seu padrão, o próprio padrão será retornado:
$ echo *bash*
*bash*
Em bash
, esse comportamento pode ser alterado com as opções nullglob
e globfail
.
Além disso, os arquivos cujos nomes começam com um período, por padrão, não são incluídos nas expansões do nome do caminho. Eles serão incluídos, no entanto, se você especificar um padrão que comece com um período:
$ echo .*bash*
.bash_history .bash_logout .bash_profile .bashrc
Mais recursos
Além de *
, existe o caractere especial ?
, que significa qualquer caractere. Portanto, file?
seria expandido para o arquivo1, mas não para o arquivo10.
Também é possível especificar grupos de caracteres. Assim, file[123]
expandiria, supondo que eles existissem, para os arquivos file1, file2, file3, mas não file4. file[[:digit:]]
se expande para todos os arquivos cujos nomes consistem em file
seguidos por um e apenas um dígito.
Os shells avançados, como o bash, têm muito mais opções. Leia sobre eles em "expansão do nome do caminho" em man bash
.