US An english version of this website is available, would you like to check it out ?

YES | NO, stay on the french website


FR Une version anglophone du site est disponible, souhaitez-vous la consulter ?

OUI | NON, rester sur le site français

Close / Fermer

print ?

29/05/2006 10:35 par kurtz_le_pirate | Signaler un contenu abusif
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
email Suivre cette discussionRéponses Lire les 4 réponsesReplies Répondre

Lire les réponses

#1 Paul Gaborit
29/05/2006 11h10 | Contenu abusif
À (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," : $value\n";
j'obtiens par exemple :
scriptPath : Scr_ctx_ScripteC.bat

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

si je fais :
print OUTFILE "$objPropEntry->Name = $value\n";
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, " = $value\n";

ou :

print $objPropEntry->Name . " = $value\n";

(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]} = $value\n";

ou :

print "@{[scalar $objPropEntry->Name]} = $value\n";

(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 -
 

Questions similaires