2012-06-22 24 views
6

¿Cuál es la variable @. en perl?¿Qué es @. en Perl?

Parece ser un especial, se puede escribir mundial, y (sorprendentemente) si prescinde de ella en comillas dobles cadenas:

use strict; 
use warnings; 

       # Under 5.8, 5.10, 5.12, 5.14, and 5.16, 
       # the following lines produce: 

@. = (3, 2, 1); # no error 
print "@.\n"; # "@." 
print @., "\n"; # "321" 

eval 'my @.; 1' # Can't use global @. in "my" at (eval 1) 
    or die [email protected];  # line 1, near "my @." 

no podía recordar haber encontrarse con él antes, y no verlo en perlvar o perldata.

+0

Esta falta de interpolación es muy incorrecta. Archivado un [informe de error] (https://rt.perl.org/rt3/Ticket/Display.html?id=113792) – ikegami

+0

@ikegami: este comportamiento no está documentado, por lo que no está mal, no importa * muy mal *. Los lenguajes de programación son para que las personas los utilicen como herramientas: si puede encontrar un programador que haya sido molestado por este comportamiento anómalo, entonces levanto mi sombrero. – Borodin

+0

@Borodin, la interpolación está bien documentada, y esto contradice directamente la documentación. ¿De qué estás hablando? – ikegami

Respuesta

6

perldoc perlvar estados:

Perl nombres de las variables pueden ser también una secuencia de dígitos o una sola puntuacion o control de carácter. Todos estos nombres están reservados para usos especiales por Perl;

y

identificadores de Perl que comienzan con los dígitos, caracteres de control, o caracteres de puntuación están exentos de los efectos de la declaración del paquete y siempre se ven obligados a estar en package main; también están exentos de los errores strict 'vars'.

Usted está utilizando un nombre reservado. No debe esperar poder confiar en ninguna característica.

+0

¿Sabes por qué no interpola? – pilcrow

+0

Lo reserva Perl. No hay ninguna razón para esperar que se comporte de una manera específica. –

+1

Presumiblemente, cuando 'perl' está mirando' "@." ', Verifica si' @ .' es una de las variables que tiene un significado especial. Si no, presumiblemente supone que no fue su intención interpolarlo.No estoy seguro exactamente qué tipo de magia se necesita para que se interprete de manera diferente, pero prefiero no aventurarme allí. –

4

$. es el número de línea actual (o número de registro) del identificador de archivo más reciente.

@. tiene ningún significado especial o el uso


"@." si prescinde de ella, pero "@{.}" hace.

@. está reservado para uso futuro y no debe utilizarse

+0

Sí. ¿Eso entonces declara de facto, por ejemplo, '% .' también? ¿Por qué '' .'' no interpola? – pilcrow

+0

@pilcrow - Igual que '@ /', '@ ~' y algunas otras variables de matriz de caracteres que no son letras. Puede usarlos como matriz, pero no se interpolarán. –

+0

@pilcrow - Se puede usar también como hash: '% ~ = qw (1 2); imprimir "$ ~ {1} \ n"; 'imprimirá' 2' –