8
votes

Pourquoi un nom de variable est-il suivi d'un soulignement non évalué correctement pendant l'interpolation de chaîne dans Perl?

Pourquoi un nom de variable est-il suivi d'un soulignement non évalué correctement pendant l'interpolation de chaîne dans Perl?

my $i = 3;

print "i = $i\n"; # works, prints "i = 3"
print "_i = _$i\n"; # works, prints "_i = _3"
print "i_ = $i_\n"; # FAILS, prints "i_ = "
print "_i_ = _$i_\n"; # sort of works, prints "_i_ = _"


4 Réponses :


18
votes

$ i _ _ est un identifiant valide, il est donc tenter d'imprimer la valeur de cette variable (que vous n'avez pas définie, c'est donc undef ).

Activer strict et avertissements .


1 commentaires

J'ai remarqué votre Bouddhabrot, tapis. Peut-être que cela vous intéresserait: Github.com/buddhabrot/buddhabrot (je n'ai pas pu vous joindre à d'autres Comment j'ai dû trouver un commentaire innocent quelque part).



7
votes

mat est correct. Si vous avez vraiment besoin de ce soulignement immédiatement après la valeur UTILISE BACKSLASH: "$ i \ _" .


3 commentaires

Imprimer 'i_ ='. $ i. "_ \ n";


Je préfère beaucoup $ {i} sur la barre oblique inverse, car ils font des choses différentes dans d'autres contextes.


Une interpolation supprimée par le dos. Les boucles autour d'un nom de variable interpolent la valeur de cette variable. Imprimer "$ {i} _ \ n" est plus facile sur mes yeux et mes yeux, parce que ces deux choses feraient la même chose s'il est inclus.



26
votes

En plus des autres réponses, vous pouvez utiliser la syntaxe alternative pour spécifier des variables: xxx

Notez l'utilisation des crochets bouclés: { et et } Pour spécifier le nom de la variable. Chaque fois que de doute, vous pouvez opter pour cette syntaxe.


0 commentaires

3
votes

Toujours utiliser ces éléments suivants:

use strict;
use warnings;


0 commentaires