Je sais que le passage d'un scalaire à un SUB est en train de passer la référence, mais puisque je suis nouveau à Perl, j'ai toujours fait le test suivant:
#!/usr/bin/perl $i = 2; subr(\$i); sub subr{ print $_[0]."\n"; print $$_[0]."\n"; }
4 Réponses :
C'est parce que votre deuxième instruction d'impression est équivalente à ce que ... Lorsque ce que vous voulez est p> dans d'autres Mots, la désémaraison se produit avant que l'indice de tableau est évalué. P> Lorsque vous ajoutez ces courriers, il dit à Perl comment interpréter l'expression comme vous le souhaitez; Il évaluera _ [0] code> d'abord, puis de référence pour obtenir la valeur. p> p>
C'est une chose d'ordre d'évaluation.
${$_[0]}
Vous n'avez pas à transmettre une référence à $ i code>. La notation
€ _ [0] code> est un em> alias em> pour
$ i code> lorsque vous l'invoquez comme
subr ($ i) code >.
ok 1 - $i == 2
ok 2 - $i == 3
ok 3 - subr2 *dies* trying to modify a literal
ok 4 - $s eq 'litx'
ok 5 - $s2 eq 'litx'
ok 6 - subr2 lives with heap variables
1..6
$$ _ [0] code> est comme
$ foo [0] code>, uniquement avec $ _ à la place du nom de la matrice. Cela signifie $ _ est traité comme une référence de tableau, et l'expression n'implique pas la référence scalaire
$ _ [0] code> du tout.
$ _--> [0] code> est équivalent, à l'aide de la syntaxe alternative
-> code>. La syntaxe pour la derréférance peut sembler arbitraire et difficile à retenir, mais il y a un sens et une commande sous-jacents; Une très bonne présentation est à http://perlmonks.org/?node=references+Quick + Référence . P>