Remplacer nom des scalaires par leur valeurs

Le
Kira
Bonjour,

Je débute en Perl.

Je lis un fichier html contenant, dans son corps, des noms de scalaires
déclarés et initialisés dans mon script.

Le fichier contient par exemple : "Hello, my name is $name".

J'éxecute ensuite la fonction "print" pour chacune des lignes récupérées.
Je me disais qu'il y avait peut-être un espoir pour que Perl imprime la
valeur des scalaires plutôt que leur nom, comme il le ferait avec print
"Hello my name is $name", mais malheureusement pas.

Ma question est donc : comment remplacer automatiquement les noms des
scalaires récupérés par leurs valeurs respectives ?

Vous remerciant par avance,
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jack
Le #122522
$titi="Hello, my name is $name";

Le 29/04/2004 11:08, :
Bonjour,

Je débute en Perl.

Je lis un fichier html contenant, dans son corps, des noms de scalaires
déclarés et initialisés dans mon script.

Le fichier contient par exemple : "Hello, my name is $name".

J'éxecute ensuite la fonction "print" pour chacune des lignes récupérées.
Je me disais qu'il y avait peut-être un espoir pour que Perl imprime la
valeur des scalaires plutôt que leur nom, comme il le ferait avec print
"Hello my name is $namen", mais malheureusement pas.

Ma question est donc : comment remplacer automatiquement les noms des
scalaires récupérés par leurs valeurs respectives ?

Vous remerciant par avance,


Kira
Le #122521
Jack wrote:
$titi="Hello, my name is $name";


Merci pour cette réponse, mais ça ne règle malheureusement pas le
problème puisque ma chaîne est lue à partir d'un fichier (html) en
utilisant foreach $line (@Data).
Les scalaires representés dans la ligne ne sont pas "convertis" : c'est
toujours "$name" qui apparaît quand on affiche la ligne, et non sa valeur.

Merci.

Paul GABORIT
Le #122382
À (at) Thu, 29 Apr 2004 11:08:27 +0200,
Kira
Je lis un fichier html contenant, dans son corps, des noms de scalaires
déclarés et initialisés dans mon script.

Le fichier contient par exemple : "Hello, my name is $name".

J'éxecute ensuite la fonction "print" pour chacune des lignes récupérées.
Je me disais qu'il y avait peut-être un espoir pour que Perl imprime la
valeur des scalaires plutôt que leur nom, comme il le ferait avec print
"Hello my name is $namen", mais malheureusement pas.

Ma question est donc : comment remplacer automatiquement les noms des
scalaires récupérés par leurs valeurs respectives ?


Supposons que $line contient une ligne de votre fichier HTML (avec ou non des
$name)... Si vous faites :

print $line;

les $name ne sont pas remplacés par leurs valeurs.

Si vous faites :

print eval ""$line"";

les $name seront remplacés.

*Mais* (car il y a un mais !) c'est très dangereux surtout si vous ne pouvez
pas contrôler le contenu du fichier HTML. Pour vous en convaincre, placer la
ligne suivante dans votre fichier HTML :

Le nom est @{[$name = "coucou"]}...

Stockez la valeur que vous voulez dans la variable $name de votre
script. Après affichage du fichier HTML via la méthode que je vous ai donnée,
votre variable contiendra "coucou" !!!

En fait la "bonne" solution pour votre problème passe par l'utilisation de
l'une des nombreuses classes qui gèrent des template. Par exemple
HTML::Template.

--
Paul Gaborit - Perl en français -
Michel Rodriguez
Le #122381
Kira wrote:

Je lis un fichier html contenant, dans son corps, des noms de scalaires
déclarés et initialisés dans mon script.

Le fichier contient par exemple : "Hello, my name is $name".

J'éxecute ensuite la fonction "print" pour chacune des lignes récupérées.
Je me disais qu'il y avait peut-être un espoir pour que Perl imprime la
valeur des scalaires plutôt que leur nom, comme il le ferait avec print
"Hello my name is $namen", mais malheureusement pas.


Tu peux faire une substitution, mais en fait il y a plus simple: utilise
un module de template. Il y en a des tas sur CPAN, celui que j'utilise
pour les trucs simple c'est Text::Template. Dans ton fichier tu ecris
"Hello, my name is {$name}" et Text::Template te remplacera tout ce qui
est entre { }.

Ca a plusieurs avantages: tu evites d'essayer de remplacer par exemple
micro$oft dans une page ;--), tu controles exactement les variables que
tu laisse visible dans le html. Et puis ca t'habitues a utiliser des
modules!

POur installer des modules, si tu es sur windows tu peux utiliser ppm,
sinon installe CPANPLUS, ca te simplifiera la vie. Enfin si ton cgi est
sur un serveur heberge ou tu ne peux pas installer de modules en root,
lis "perldoc -q module" pour voir comment installer un module dans un
repertoire a toi.


--
Michel Rodriguez
Perl & XML
http://www.xmltwig.com

Publicité
Poster une réponse
Anonyme