Como se describe en perldoc perldata:
... Un identificador dentro de tales curlies se ve obligado a ser una cadena, como lo es cualquier identificador simple dentro de una hash subíndice. Tampoco es necesario citar. Nuestro ejemplo anterior , $days{'Feb'}
se puede escribir como $days{Feb}
y las citas se asumirán automáticamente. Pero cualquier cosa más complicada en el subíndice se interpretará como una expresión. Esto significa, por ejemplo, que $version{2.0}++
es equivalente a $version{2}++
, no a $version{'2.0'}++
.
En general, si tiene una clave hash con un carácter fuera del rango [A-Za-z0-9_]
, utilice comillas (simples o dobles) dentro de las llaves. Al igual que con las cadenas normales, contenidos en comillas dobles serán analizados para cualquier contenía las variables, mientras que las cadenas entre comillas sencillas se toman literalmente:
use strict; use warnings;
use Data::Dumper;
my $x = 1;
my %hash = (
bare_string => 'hi there',
"not a bare string" => 'yup',
);
$hash{'$x'} = 'foo';
$hash{"$x"} = 'bar';
print Dumper(\%hash);
impresiones:
$VAR1 = {
'bare_string' => 'hi there',
'not a bare string' => 'yup',
'$x' => 'foo'
'1' => 'bar',
};
* '¿Cómo puedo utilizar una clave hash en Perl que tiene un punto literal' * - El título es un poco engañoso:? No es el * punto literal * que crea el problema, pero la clave * sin comillas * con un punto en ella. – Wolf