[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