Puis-je savoir quelle est l'utilisation du et aussi, le Je sais que c'est pour la syntaxe de langues stricte ou ce que ne pas, mais pourquoi ne pas simplement en faire un standard que chaque variable doit être déclarée par un Merci pour toutes vos discussions / réponses, je souhaite accepter beaucoup de vos réponses, mais que je ne peux qu'accepter un seul, j'accepterai celui où d'autres utilisateurs peuvent comprendre avec facilité. P> et code> devant les sous-marins, sans cela, les sous-verbaux sont toujours en mesure d'exécuter. P>
mon code> devant les variables de Perl. P>
mon p>
5 Réponses :
Le Le mon code> limite la variable à la portée actuelle. Avec le
Utiliser strict code> pragma, que vous devez utiliser, vous devez em> em> déclarer les variables (par exemple avec
mon code>). L'alternative à aller sans exister pour des raisons de flexibilité de scripts très courts.
et code> est rarement utilisé depuis que Perl par défaut, interprète des mots sans sigil, mais est utile si vous souhaitez créer des sous-programmes, mais est utile si vous souhaitez créer une référence au sous-programme. p>
Réponse simple et directe .. Merci d'avoir clarifié =)
Puis-je savoir quelle est l'utilisation de la & devant les sous-marins, sans cela, les sous-verbaux sont toujours en mesure de courir. P> blockQuote>
Compatibilité à l'envers avec Perl 4 P>
Et aussi, le mon devant des variables Perl. P> blockQuote>
Il définit la portée du bloc p>
Je sais que c'est pour la syntaxe de langues stricte ou ce qui n'est pas, mais pourquoi ne font-ils pas simplement en faire un standard que chaque variable doit être déclarée par a? P> blockQuote>
- Compatibilité à l'envers (donc
Utiliser strict; code> interdire des déclarations variables nues) li>
- variables peut également être déclarée avec
Notre code> ou
local code> li> ol>
En outre, il est plus facile d'écrire 1 doublures avec perl -e code> sans
mon code>.
sur & code> a encore une bonne distinction: appeler avec elle (
& yysub code>) rend actuellement
@_ code> visible pour appelé sous aussi. Quoi qu'il en soit, je l'utilise dans mes scripts principalement pour des raisons de clarté: cela indique clairement, qui sont mes propres fonctions et qui fonctionne de noyau ou de modules. P>
mon code>. Chaque didacticiel et chaque DOC suggère d'utiliser
utiliser strict; code> pragma, vous devez donc déclarer votre variable avec
mon code>. Donc, la situation de mon point de vue est jolie à l'envers: si la portée est si importante pour les meilleures pratiques, il serait normal que les variables soient scopées par défaut (comme nous disons avec
mon code> maintenant) et quand nous Vraiment besoin de variables globales, nous devrions les déclarer comme ça. Je comprends que c'est l'héritage de Perl, mais c'est toujours contre l'idéologie de Perl pour empêcher la redondance. En utilisant
mon code> à chaque fois pour déclarer pourrait être remplacé par une sorte de pragma. [Désolé, Robobooga, peut-être aller trop loin de votre question] p>
Malheureusement, si, dire, Perl 5.14 permettrait à strict code> par défaut, alors tout le code PERL existant qui ne i> pas
utilise strict code> est instantanément cassé. Perl 5.12 va un peu dans cette direction: Si vous
Utilisez 5.012 code>, alors
strict code> est activé automatiquement.
@mscha: Oui, je comprends, il n'ya aucun moyen de faire défaut de pragma strict pour chaque script écrit là-bas, mais je rêve de pragma, où toutes les variables sont par défaut locales dans leur portée et quand j'ai besoin de variables globales, je déclare les explicitement avec notre code>
Cela ne vous dérange pas d'utiliser mon code> si souvent. Lorsque j'ai une variable dans la portée la plus externe et déclarez également une fonction avec une variable du même nom (pour la clarté, à sa manière), je sais que je reçois une nouvelle variable dans le SUB, car je dois maintenant penser que non utiliser mon plutôt que de penser à l'utiliser.
Si vous voulez savoir comment écrire Perl moderne, puis-je vous recommander de lire Perl moderne A >? Vous pouvez acheter une version d'arbre mort ou télécharger une version électronique gratuitement. P>
Semble comme une bonne lecture. Je vais lui donner une question .. Cette question est plus une chose qui me dérangeait comme j'ai vu de nombreux sites Web différents avec différentes implémentations. C'est probablement ma propre faute de ne pas lire leurs dates d'affichage.
dans Perl, les appels de fonctions ont été optimisés pour ne pas nécessiter le sigil & code>. Lorsque vous déclarez un sous-programme:
use strict;
our $foo = 5; # $main::foo == $foo
{ # scope start
my $foo = 6;
print "$foo, $main::foo\n"; # prints '6, 5';
} # scope end
print "$foo, $main::foo\n"; # prints '5, 5'
# since $foo and $main::foo are the same
Merci pour votre réponse et vos explications très complètes
@Eric Strom: Vous dites que les & ne devraient généralement pas être utilisés. Cependant, j'ai remarqué que Emacs fait une belle syntaxe de syntaxe si vous utilisez et sous les appels de sous-programme. Y a-t-il un inconvénient ou un danger spécifique pour les utiliser à cet effet? Ou, de préférence, existe-t-il un moyen d'obtenir des emacs à la syntaxe Mettez-vous des sous-marins sans elle?
@Ygomez => Le danger avec l'utilisation de & code> Tout le temps est que
& mysub code> et
& mysub () code> font des choses très différentes (les anciens appels Avec la valeur actuelle de
@_ code>, et celle-ci appelant le sous avec une liste d'arguments vide). Étant donné que les deux noms sont si visuellement similaires, il peut être facile de se tromper un pour l'autre, ce qui entraînera du mal à diagnostiquer des bugs. Étant donné que Perl ne nécessite pas le
et code> dans la plupart des endroits, il est donc préférable de le laisser dehors et ne l'utilise que lorsque vous souhaitez explicitement le comportement qu'il peut fournir. En ce qui concerne Emacs, je suis sûr qu'il y a d'autres modes de surbrillance de la syntaxe.
Il convient également de noter que & foo; code> est différent dans l'exécution à
FOO (@_); code> - le premier ressemble plus à un goto, laissant la pile en place qui, dans Des cas rares et très spécifiques tels que la récursion de la queue profonde peuvent être une grosse victoire de performance.
Pour les futurs lecteurs: la réponse de Eric Strom est la seule qui est complètement correcte. Le comportement du prototype de vaincre
& code> est important à savoir.