[Cascavel-pm] Simular o pipe "|"
Nilson Santos Figueiredo Junior
acid06 em gmail.com
Quarta Agosto 3 17:26:56 PDT 2005
On 8/3/05, Alceu R. de Freitas Jr. <glasswalk3r em yahoo.com.br> wrote:
> O operador "diamante" lê diretamente de STDIN. A menos
> que o Marco tenha algum truque, não vejo como usá-lo
> nesse caso.
Na verdade, o filehandle nulo (aka diamond operator) é algum
extremamente mágico.
Se você tem um programa que faça:
while (<>) {
# do stuff
}
O filehandle nulo vai representar a STDIN OU vai ser um atalho mágico
para todos os arquivos passados como parâmetros. Dessa forma, se você
chamar o programa da seguinte maneira:
perl programa.pl arquivo1 diretorio/arquivo2 arquivo3
O perl magicamente vai abrindo os arquivos "arquivo1",
"diretorio/arquivo2" e "arquivo3" à medida que o EOF de cada um é
antingido e vai dando a saída como um grande arquivo contínuo. Você
pode até mesmo colocar mais nomes de arquivos na @ARGV em run time que
ele vai continuar os que você adicionar.
O mais interessante de tudo é que um programa usando essa construct,
*também* aceita entrada na forma:
perl programa.pl < arquivo1
Mas a primeira forma que citei é mais interessante. Em shells que
fazem wildcard expansion ou fazendo uso do módulo Win32::Autoglob,
você pode fazer coisas como:
perl programa.pl *.log
E o filehandle nulo lerá de todos os arquivos .log. Bem útil, uso bastante.
-Nilson Santos F. Jr.
Mais detalhes sobre a lista de discussão Cascavel-pm