2010-08-28 13 views
37

Soy nuevo en Perl, y los utilicé como esto

$_

foreach (@list) { 
    print "$_\n"; 
} 

@_

sub search { 
    my ($no, @list) = @_; 
} 

¿Cómo es exactamente lo que éstos ponen de relieve las variables funcionan en Perl? ¿Cuáles son los otros constructos donde son útiles?

+15

[perldoc perlvar] (http://perldoc.perl.org/perlvar.html), [perldoc perlsyn] (http://perldoc.perl.org/perlsyn.html) – Ether

+17

Parece que podría hacer una Mucho más uso de una introducción a los elementos esenciales de Perl que las respuestas de StackOverflow. ¿Has estado en http://learn.perl.org/? Existen recursos que incluyen documentación oficial de Perl, libros Perl (incluido Beginning Perl gratis en línea) y tutoriales en línea de alta calidad. – hobbs

Respuesta

45

Este es el tipo de pregunta que indica que realmente debería leer un libro, y tal vez el resto de la etiqueta perl faqs.

Sin embargo, $_ es una variable de contexto que es creada implícitamente por ciertas construcciones y utilizada implícitamente por ciertas funciones incorporadas. He aquí algunos ejemplos:

while(<>) { 
    next if /^#/; 
    last if /^q(?:uit)?$/; 
    say "Howdy!" if /^hello$/; 
} 

haciendo un montón de ambiente de trabajo y la inspección de la variable $_ y es equivalente a esto:

while(defined($_ = <>)) { 
    next if $_ =~ /^#/; 
    last if $_ =~ /^q(?:uit)?$/; 
    say "Howdy!" if $_ =~ /^hello$/; 
} 

Otras construcciones que establecen $_ son: foreach bucles, given bloques, map y grep operaciones, y catch bloques en Try::Tiny.

Otras construcciones que usan $_ son: instrucciones print;, el operador de sustitución s/// y el operador de transliteración tr///.

Lo aconsejo: mientras aprende Perl, no use $_ implícitamente. Escríbalo todo en su totalidad (como en el segundo ejemplo anterior), para reforzar en tu mente lo que realmente está sucediendo. Al igual que cuando estás aprendiendo un idioma extranjero, debes aprender a hablar de manera adecuada y cuidadosa antes de aprender a ablandar el lenguaje. $_ es útil para escribir un código más corto, más terser, y puede ser más claro al enfocarse en el procesamiento en lugar de las variables en las que se está haciendo, pero solo una vez que haya aprendido como segundo naturaleza qué operaciones están usando $_. De lo contrario, es solo un desastre confuso.

Como se mencionó en otra parte, @_ es la lista de argumentos para una subrutina.

+4

Como el OP ha notado, a veces la llamada implícita de 'print' no ayuda si uno necesita agregar una nueva línea después. Los Perl más nuevos tienen el comando 'say' que puede actuar sobre' $ _' pero agrega una nueva línea para ti. 'use feature 'say'' o' use 5.10.0' para habilitar. Philip, sé que lo sabes como está en tu ejemplo, solo estaba diciendo que estoy completo. –

+0

File :: Find :: find también establece '$ _'; Sin embargo, no estoy seguro de que enumeraría los módulos que establecen $ _ aquí; no son "construcciones". – ysth

+1

Su enlace 'book' ahora está muerto. – Ruslan

Cuestiones relacionadas