2008-09-19 8 views
5

J'essaie de comprendre le code Perl de quelqu'un d'autre sans trop savoir Perl moi-même. J'apprécierais votre aide.Qu'est-ce qu'un double trait de soulignement dans Perl?

Je l'ai rencontré une fonction Perl le long de ces lignes:

MyFunction($arg1,$arg2__size,$arg3) 

Y at-il un sens à la syntaxe double underscore dans $arg2, ou est-ce qu'une partie du nom du second argument?

Répondre

11

Il n'y a pas de signification spécifique à l'utilisation d'un __ dans un nom de variable perl. C'est probablement la préférence du programmeur, surtout dans le cas que vous avez cité dans votre question. Vous pouvez voir plus d'informations sur la dénomination des variables perl here.

1

Je suis assez certain arg2__size est juste le nom d'une variable.

11

Comme dans la plupart des langages, le soulignement fait juste partie d'un identifiant; pas de signification particulière.

Mais êtes-vous sûr que c'est Perl? Il n'y a pas de sceaux sur les variables. Pouvez-vous poster plus de contexte?

+0

Jeez, ils laisser entrer personne ici;) – Ovid

+0

Ouais - ce qui est le site à venir à . Sérieusement. –

+0

J'ai réparé les sceaux, alors maintenant vous répondez n'a aucun sens.:) –

2

En ce qui concerne l'interpréteur, un trait de soulignement est juste un autre caractère autorisé dans les identificateurs. Il peut être utilisé comme alternative à la concaténation ou au boîtier de chameau pour former des identifiants multi-mots. Un trait de soulignement principal est souvent utilisé pour signifier qu'un identificateur est uniquement destiné à une utilisation locale, . pour les parties non exportées d'un module. C'est simplement une convention; l'interprète s'en fout.

2

Dans le contexte de votre question, le double trait de soulignement n'a aucune signification programmatique. Double underscores signifie quelque chose de spécial pour un nombre limité de valeurs en Perl, plus particulièrement __FILE__ & __LINE__. Ce sont des littéraux spéciaux qui ne sont pas préfixés d'un sigil ($, % ou @) et ne sont interpolés qu'en dehors des guillemets. Ils contiennent le chemin complet & nom du fichier en cours d'exécution et de la ligne en cours d'exécution. Voir la section sur 'Littéraux spéciaux' dans perldata ou this post on Perl Monks

1

La réponse de Mark est bien sûr correcte, elle n'a pas de signification particulière.

Mais je tiens à noter que votre exemple ne ressemble pas du tout à Perl. Les variables Perl ne sont pas des barewords. Ils ont les sceaux, comme vous le verrez dans les liens ci-dessus. Et Perl n'a pas de "fonctions", il a des sous-programmes.

Il peut donc y avoir une certaine confusion quant à la langue dont nous parlons.

+0

J'ai édité la question pour ajouter des sigils, alors maintenant cette réponse est un peu démodée. Notez, cependant, que ces mots auraient pu être des noms de sous-programmes. Et, Perl a des fonctions. Ils sont listés dans perlfunc. :) –

-1

Vous devrez indiquer à l'interpréteur que "$ arg2" est le nom d'une variable. et non "$ arg2__size". Pour cela, vous devrez utiliser la parenthèse. (Cet usage est similaire à celui vu dans shell).

Cela devrait fonctionner MyFunction (arg1 $, $ {arg2} __ taille, ARG3 $)

--Binu

Questions connexes