143 votos

Características ocultas de Perl?

¿Cuáles son algunas realmente útiles, pero esotérico características del lenguaje en Perl que en realidad hemos sido capaces de emplear para hacer un trabajo útil?

Instrucciones:

  • Intente limitar las respuestas a Perl básico y no CPAN
  • Por favor dar un ejemplo y una breve descripción

Características ocultas también se encuentran en otros idiomas " Oculto Características:

(Todos estos son de un corion de la respuesta)

  • C
    • Duff del Dispositivo
    • La portabilidad y Standardness
  • C#
    • Citas para el espacio en blanco delimitado listas y cadenas
    • Aliasable espacios de nombres
  • Java
    • Estática Initalizers
  • JavaScript
    • Las funciones son ciudadanos de Primera Clase
    • Ámbito de bloque y cierre
    • Llamar a los métodos y los descriptores de acceso de forma indirecta a través de una variable
  • Ruby
    • La definición de los métodos a través de código
  • PHP
    • Omnipresente en la documentación en línea
    • La magia de los métodos de
    • Referencias simbólicas
  • Python
    • Un valor de la línea de intercambio de
    • Capacidad para reemplazar incluso núcleo de funciones con su propia funcionalidad

Otras Características Ocultas:

Operadores:

Citando las construcciones:

De la sintaxis y los Nombres de:

Módulos, Pragmas, y opciones de línea de comandos:

Variables:

Bucles y control de flujo:

Expresiones regulares:

Otras características:

Otros trucos, y meta-respuestas:


Ver También:

54voto

John Siracusa Puntos 8106

El operador flip-flop es útil para saltarse la primera iteración cuando bucle a través de los registros (por lo general líneas) devueltos por un identificador de archivo, sin usar una variable de indicador:

 while(<$fh>)
{
  next if 1..1; # skip first record
  ...
}
 

Ejecute perldoc perlop y la búsqueda de "flip flop" para obtener más información y ejemplos.

47voto

moritz Puntos 6295

Hay muchos que no obvia las características en Perl.

Por ejemplo, ¿sabía usted que puede haber un espacio después de un sello?

 $ perl -wle 'my $x = 3; print $ x'
 3

O que puede dar subs nombres numéricos si el uso de referencias simbólicas?

$ perl -lwe '*4 = sub { print "yes" }; 4->()' 
yes

Hay también el "bool" cuasi operador, que devuelven 1 para verdadero y las expresiones de la cadena vacía para falso:

$ perl -wle 'print !!4'
1
$ perl -wle 'print !!"0 but true"'
1
$ perl -wle 'print !!0'
(empty line)

Otras cosas interesantes: con use overload puede sobrecargar la cadena de literales y números (y, por ejemplo, hacen BigInts o lo que sea).

Muchas de estas cosas son en realidad documentada en algún lugar, o se derivan lógicamente de la documenta las características, pero sin embargo algunos no son muy bien conocidos.

Actualización: Otro bonito. Por debajo de la q{...} citar a construcciones fueron mencionados, pero ¿sabía usted que usted puede utilizar letras como delimitadores?

$ perl -Mstrict  -wle 'print q bJet another perl hacker.b'
Jet another perl hacker.

Igualmente puede escribir expresiones regulares:

m xabcx
# same as m/abc/

46voto

timkay Puntos 183

Añadir soporte para archivos comprimidos a través de ARGV magia:

 s{ 
    ^            # make sure to get whole filename
    ( 
      [^'] +     # at least one non-quote
      \.         # extension dot
      (?:        # now either suffix
          gz
        | Z 
       )
    )
    \z           # through the end
}{gzcat '$1' |}xs for @ARGV;
 

(Comillas alrededor de $ _ necesaria para manejar nombres de archivo con metacaracteres de shell en)

Ahora el <> característica descomprimir cualquier @ARGV archivos que terminan con "gz" o ".Z":

 while (<>) {
    print;
}
 

40voto

pjf Puntos 4685

Una de mis funciones favoritas en Perl usando el operador booleano || operador seleccionar entre un conjunto de opciones.

 $x = $a || $b;

 # $x = $a, if $a is true.
 # $x = $b, otherwise

Esto significa que uno puede escribir:

 $x = $a || $b || $c || 0;

para tomar la primera verdadero valor de $a, $by $c, o un defecto de 0 de otro modo.

En Perl 5.10, // operador, que devuelve la mano izquierda si es definido, y en la parte derecha de otra manera. Los siguientes selecciona la primera define el valor de $a, $b, $co 0 en contrario:

$x = $a // $b // $c // 0;

Estos también pueden ser utilizados con su corto formas de mano, que son muy útiles para proporcionar valores por defecto:

$x ||= 0; # Si $x era falso, ahora tiene un valor de 0.

$x //= 0; # Si $x undefined, ahora tiene un valor de cero.

¡Hasta la vista,

Pablo

39voto

Leon Timmermans Puntos 23230

Los operadores y unario - no sólo trabajar en los números, sino también en las cadenas.

 my $_ = "a"
print -$_
 

impresiones -a

 print ++$_
 

grabados b

 $_ = 'z'
print ++$_
 

impresiones aa

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X