GNT sans publicité, site mobile, fonctionnalitées exclusives...

print ?

Le
kurtz_le_pirate
bonjour,

encore un mystère de perl pour moi. si je résume :

si je fais :
print $objPropEntry->Name," : $value";
j'obtiens par exemple :
scriptPath : Scr_ctx_ScripteC.bat

si je fais :
print OUTFILE $objPropEntry->Name." = $value";
j'obtiens
scriptPath : Scr_ctx_ScripteC.bat

si je fais :
print OUTFILE "$objPropEntry->Name = $value";
j'obtiens :
Win32::OLE=HASH(0x199bf24)->Name = Scr_ctx_ScripteC.bat

pourquoi n'y a-t-il pas d'interpretation de $objPropEntry->Name dans
ce cas ?




ps : en fait j'écris dans un fichier html. la ligne exacte est :
print OUTFILE
"<tr><td><b>$objPropEntry->Name</b></td><td>$value</td></tr>";
mais c'est pas un problème de html.


--
klp
Lire les 4 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Paul Gaborit
Le #116537
À (at) Mon, 29 May 2006 10:35:55 +0200,
"kurtz_le_pirate"
encore un mystère de perl pour moi. si je résume :

si je fais :
print $objPropEntry->Name," : $valuen";
j'obtiens par exemple :
scriptPath : Scr_ctx_ScripteC.bat

si je fais :
print OUTFILE $objPropEntry->Name." = $valuen";
j'obtiens
scriptPath : Scr_ctx_ScripteC.bat

si je fais :
print OUTFILE "$objPropEntry->Name = $valuen";
j'obtiens :
Win32::OLE=HASH(0x199bf24)->Name = Scr_ctx_ScripteC.bat

pourquoi n'y a-t-il pas d'interpretation de $objPropEntry->Name dans
ce cas ?


Perl n'effectue d'interpolation que sur les variables... pas sur les
appels de procédures, de fonction ou de méthodes.

La manière simple de faire est donc :

print $objPropEntry->Name, " = $valuen";

ou :

print $objPropEntry->Name . " = $valuen";

(Dans le premier cas, la méthode est appelée dans un contexte de liste
alors que dans le second, elle est appelée dans un contexte scalaire.)

Pour forcer l'interpolation d'un appel de fonction, on peut écrire :

print "@{[$objPropEntry->Name]} = $valuen";

ou :

print "@{[scalar $objPropEntry->Name]} = $valuen";

(Dans le premier cas, la méthode est appelée dans un contexte de liste
alors que dans le second, elle est appelée dans un contexte scalaire.)

Ce n'est pas complètement équivalent à cause de la variable $, qui est
utilisée lors de l'interpolation d'une liste. De plus, dans ce cas, le
passage par l'interpolation est plus lent.

--
Paul Gaborit - Perl en français -
kurtz le pirate
Le #116531
In article Paul Gaborit

Perl n'effectue d'interpolation que sur les variables... pas sur les
appels de procédures, de fonction ou de méthodes.


merci m'sieu paul :))

je n'avais pas remarqué cette subtilité d'appel de procédure/méthode !
maintenant tout baigne.




--
klp

Jean-Marc FRIGERIO
Le #115925
Paul Gaborit wrote:


À (at) Mon, 29 May 2006 10:35:55 +0200,
"kurtz_le_pirate"
encore un mystère de perl pour moi. si je résume :

si je fais :
print $objPropEntry->Name," : $valuen";
j'obtiens par exemple :
scriptPath : Scr_ctx_ScripteC.bat

si je fais :
print OUTFILE $objPropEntry->Name." = $valuen";
j'obtiens
scriptPath : Scr_ctx_ScripteC.bat

si je fais :
print OUTFILE "$objPropEntry->Name = $valuen";
j'obtiens :
Win32::OLE=HASH(0x199bf24)->Name = Scr_ctx_ScripteC.bat

pourquoi n'y a-t-il pas d'interpretation de $objPropEntry->Name dans
ce cas ?


Perl n'effectue d'interpolation que sur les variables... pas sur les
appels de procédures, de fonction ou de méthodes.

La manière simple de faire est donc :

print $objPropEntry->Name, " = $valuen";

ou :

print $objPropEntry->Name . " = $valuen";

(Dans le premier cas, la méthode est appelée dans un contexte de liste
alors que dans le second, elle est appelée dans un contexte scalaire.)

Pour forcer l'interpolation d'un appel de fonction, on peut écrire :

print "@{[$objPropEntry->Name]} = $valuen";

ou :

print "@{[scalar $objPropEntry->Name]} = $valuen";

(Dans le premier cas, la méthode est appelée dans un contexte de liste
alors que dans le second, elle est appelée dans un contexte scalaire.)

Ce n'est pas complètement équivalent à cause de la variable $, qui est
utilisée lors de l'interpolation d'une liste. De plus, dans ce cas, le
passage par l'interpolation est plus lent.



Salut,
Si tu y tiens vraiment tu peux essayer Perls6::Interpolators

-- jmf


Paul Gaborit
Le #115774
À (at) Tue, 06 Jun 2006 15:47:37 +0200,
Jean-Marc FRIGERIO
Si tu y tiens vraiment tu peux essayer Perls6::Interpolators
[...Perl6::Interpolators...]


Je ne suis pas sûr que ce sera plus rapide... Je dirais même plus : je
suis sûr que ce sera encore moins rapide. ;-)

--
Paul Gaborit - Perl en français -
Publicité
Suivre les réponses
Poster une réponse
Anonyme