55 votes

Quelle est la différence entre `$this`, `@qui", et "%de ceux " en Perl?

Quelle est la différence entre $this, @that, et %those en Perl?

43voto

draegtun Points 17081

Un moyen mnémotechnique pour retenir Perl sigils sont:

  • $calar
  • @rray
  • %de cendres

Matt Truite a écrit un grand commentaire sur le blog.fogus.moi sur Perl sigils je pense que c'est utile de façon à avoir collé ci-dessous:

En fait, perl sigils ne désigne pas type de variable – ils dénotent une conjugaison – $ est ‘la', @ est "ces", % est la carte de' ou de ce type de variable est désignée par [] ou {}. Vous pouvez voir cela avec:

    my $foo = 'foo';
    my @foo = ('zero', 'one', 'two');
    my $second_foo = $foo[1];
    my @first_and_third_foos = @foo[0,2];
    my %foo = (key1 => 'value1', key2 => 'value2', key3 => 'value3');
    my $key2_foo = $foo{key2};
    my ($key1_foo, $key3_foo) = @foo{'key1','key3'};

donc en regardant le sigil lors de l'écrémage du code perl vous dit ce que vous allez faire plutôt que ce que vous êtes d'exploitation sur, à peu près.

C'est, certes, assez confus jusqu'à ce que vous vous habituez à elle, mais une fois que vous êtes habitué à ça il peut être un outil extrêmement utile pour l'absorption de l'information, tandis que l'écrémage code.

Vous êtes toujours parfaitement le droit de détester, bien sûr, mais c'est un concept intéressant et j' la figure vous préférerez peut-être la haine de ce qui est -en fait - la passe plutôt que ce que vous pensiez passe :)

/I3az/

24voto

CaffGeek Points 10925

$c'est une valeur scalaire, il contient 1 élément comme "apple"

@c'est un tableau de valeurs, il est titulaire de plusieurs comme ("pomme", "orange", "poire")

%ceux qui est un hachage de valeurs, il détient des paires clé-valeur, comme ("apple" => "rouge", "orange" => "orange", "poire" => "jaune")

voir: http://perldoc.perl.org/perlintro.html#Perl-variable-types

10voto

mob Points 61524

Perl inventeur était un linguiste, et il a cherché à faire de Perl comme un "langage naturel".

À partir de ce post:

La désambiguïsation par le nombre de cas et l'ordre des mots

Partie de la raison pour une langue peut s'en tirer avec certaines ambiguïtés locales est que d'autres ambiguïtés sont supprimées par divers mécanismes. L'anglais utilise le nombre et l'ordre des mots, avec des vestiges d'un système de cas dans les pronoms: "L'homme regarda les hommes, et ils ont regardé en arrière à lui." Il est parfaitement clair dans cette phrase qui fait quoi à qui. De même, Perl a nombre de marqueurs sur ses noms; c'est, $chien est un chien, et @chien est (potentiellement) de nombreux. Donc $ et @ sont un peu comme "ceci" et "ces" en anglais. [italiques ajoutés]

9voto

brian d foy Points 71781

Souvent, les gens essaient d'associer des sceaux pour les types de variables, mais ils ne sont que faiblement liées. C'est un sujet qui nous a frappé très fort dans l'Apprentissage du langage Perl et Efficace de Programmation Perl , car il est beaucoup plus facile à comprendre Perl quand vous comprenez les sigils.

Beaucoup de gens oublient que les variables et les données sont en fait la part des choses. Les Variables permettent de stocker des données, mais vous n'avez pas besoin de variables à utiliser les données.

L' $ indique une valeur scalaire unique (pas nécessairement une variable scalaire):

$scalar_var
$array[1]
$hash{key}

L' @ dénote plusieurs valeurs. Qui pourrait être le tableau dans son ensemble, d'une tranche ou d'un déréférencement:

@array;
@array[1,2]
@hash{qw(key1 key2)}
@{ func_returning_array_ref };

L' % indique une table de hachage, ce qui pourrait être un hachage variable ou un déréférencement:

%hash
%$hash_ref

4voto

Platinum Azure Points 22380

Vous voudrez peut-être regarder à l' perlintro et perlsyn documents en ordre à vraiment commencer avec la compréhension du langage Perl (c'est à dire, Lire Le Retournement Manuel). :-)

Qui a dit:

  • $this est un scalaire, qui peut stocker un nombre (int ou float), une chaîne, ou une référence (voir ci-dessous);
  • @that est un tableau, qui peut stocker une liste ordonnée de scalaires (voir ci-dessus). Vous pouvez ajouter un scalaire sur un tableau avec l' push ou unshift fonctions (voir perlfunc), et vous pouvez utiliser des parenthèses délimitée liste séparée par des virgules de scalaire des littéraux ou des variables pour créer un littéral de tableau (c'est à dire, my @array = ($a, $b, 6, "seven");)
  • %those est une table de hachage, qui est un tableau associatif. Hachages ont des paires clé-valeur des entrées, de sorte que vous pouvez accéder à la valeur de hachage par la fourniture de ses clés. Hachage littéraux peuvent également être spécifiées comme les listes, sauf que chaque impair d'entrée est l'un des principaux et tous les deux on est une valeur. Vous pouvez également utiliser un => de caractère au lieu d'une virgule pour séparer une clé et une valeur. (c'est à dire, my %ordinals = ("one" => "first", "two" => "second");)

Normalement, lorsque vous passer des tableaux ou des hachages de sous-routine appels, les listes individuelles sont aplaties dans une longue liste. C'est parfois souhaitable, parfois pas. Dans ce dernier cas, vous pouvez utiliser des références pour passer une référence à l'ensemble de la liste comme un scalaire unique argument. La syntaxe et la sémantique de références sont difficiles, même si, et à l'automne au-delà de la portée de cette réponse. Si vous voulez le vérifier, mais, voyez perlref.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X