Perl no es C, es Perl :-) (Era Re: [P]perl en una linea)
Ernesto Hernandez-Novich
emhn at telcel.net.ve
Tue Nov 27 10:15:44 CST 2001
On Tue, 27 Nov 2001, Jose Luis Zabalza wrote:
> El Mar 27 Nov 2001 14:54, Larry Alexander Nieves escribió:
> > >
> > > perl -ne 'print "$ARGV\n",$X=$ARGV if $X ne $ARGV;/MiFuncion\((.*)\)/g
> > > and print "($1)\n"' *.cpp
> > >
> > > Pregunta :
> > >
> > > ¿ Porque me imprime dos veces el nombre del fichero ?
> >
> > Porque tu se lo estás pidiendo explicitamente, con
> > 'print "$ARGV\n"'
> >
> > Lee perlvar(1)
>
> Ya lo he leido, ya se porque es. Lo que yo quiero es
En beneficio de los demás, se debe a un inadvertido uso del operador
coma (vicio adquirido de los programadores C :-).
print(A,B) indica "A y B son argumentos para la función print()"
print A,B indica "la expresión A,B es argumento para la función print()"
Y son cosas _muy_ diferentes.
> perl -ne '(print "$ARGV\n"),$X=$ARGV if $X ne $ARGV;/MiFuncion\((.*)\)/g and
> print "($1)\n"' *.cpp
Ese cortocircuitaje es un "C-ismo", considerando que en Perl se puede
"imprimir lo que se hace" me gusta más
perl -ne 'BEGIN { $\ = "\n" } print $x = $ARGV if $x ne $ARGV;
/MiFuncion\((.*)\)/g and print "($1)"' *.cpp
print $x = $ARGV es, en efecto, imprimir el resultado de la asignación,
que solamente se efectúa si $x ne $ARGV. Por otro lado, separar el "\n"
del print deja claro lo que se quiere imprimir, poniendo lo cosmético
en manos de $\.
Y este es más rápido y compacto, a costo de memoria (tanta como el
archivo más grande que estés procesando).
perl -0777ne 'BEGIN { $\ = "\n" } print $ARGV;
print "($1)" while /MiFuncion\((.*)\)/g' *.cpp
- Sin cortocircuitajes.
- Sin variables globales para saber dónde estoy parado.
- Usando //g como se concibió, en contexto de lista para que suministre
todos los valores a un while() y los imprima uno por uno.
Piensa en Perl, no en C (se dice fácil ;-).
TMTOWTDI
--
Ernesto Hernández-Novich - Running Linux 2.4.16 i686 - Unix: Live free or die!
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/E d+(++) s+: a C+++$ UBLAVHIOSC*+++++$ P++++$ L+++$ E--- W+ N++ o K+++ w--
O- M- V- PS+ PE Y+ PGP>++ t+ 5- X+ R* tv+ b++ DI+++$ D++ G++ e++>+++ h r% y+
-----END GEEK CODE BLOCK-----
------------------------------------------------------------------------
Enviar e-mail a <majordomo at pm.org> colocando en el cuerpo:
"UNSUBSCRIBE caracas-pm-list" para desuscribirse.
"INFO caracas-pm-list" para conocer las reglas de etiqueta.
------------------------------------------------------------------------
More information about the caracas-pm
mailing list