Uno de los objetivos de diseño con las variables de Perl era hacer que se distinguieran visualmente de las instrucciones internas, palabras reservadas, palabras de flujo de control, etc. Para alguien que no esté familiarizado con Perl, todas las pistas pueden parecer ruido de línea. Pero para alguien competente con Perl, los "sigilos", como se los llama, hacen que el código sea más legible y más comprensible. Como ya observó, el tipo de sigilo en Perl5 cambia dependiendo de los datos subyacentes a los que se accede. $ para escalar, @ para matriz y% para hash.
Pero existe la señal visual adicional de que $hash{key}
se refiere al valor escalar contenido en el hash. El símbolo $
indica escalar, y los corchetes {}
indican que estamos indexando en un hash (solo como ejemplo). En el caso de la indexación en una matriz, $array[0]
, por ejemplo: El $
nos dice que estamos accediendo al valor escalar contenido en la matriz, que se evidencia por los corchetes, en el punto índice entre los corchetes. Cuando vemos @array[1, 2, 3]
, tenemos un aviso visual inmediato a través del @
que estamos agarrando una lista de elementos (suponiendo un contexto de lista) de una matriz (los corchetes aún nos dicen que los estamos obteniendo de una matriz) . Esa es una porción de matriz. Una rebanada de hash sería @hash{qw/ this that the other/}
. Entonces, una vez más, @
nos dice que busquemos una lista, y las llaves nos dicen que las estamos obteniendo de un hash. Cuando vemos un @
o un %
sin paréntesis de postfix, estamos tomando toda la matriz o hash.
Las pistas se convierten en una segunda naturaleza rápidamente.
Perl6 es un poco diferente, y los usuarios expertos de Perl5 necesitarán algunos días para acostumbrarse. ;)
Hay un buen artículo de Wikipedia sobre el tema aquí: Sigil (Computer Programming)
Aparte de la guía visual, los sellos hacen otras cosas más fácil también; Desreferencia e interpolación, por ejemplo. Mientras que los operadores más elaborados podrían haber sido utilizados para algo así como la interpolación (y aún son necesarios ocasionalmente para eliminar la ambigüedad de dónde termina una variable y continúan los caracteres de las palabras contiguas), el objetivo era mantener las cosas simples fáciles, al tiempo que hacía las cosas difíciles.
en Perl @array puede ser un escalar en función del contexto (que devuelve la longitud de la matriz) – Bruce
usted debe dar una oportunidad :) rubí – Sairam
Esto se preguntó antes http://stackoverflow.com/questions/3073812/why-php-variables-start-with-a-sign-symbol – dpp