OVH Cloud OVH Cloud

chaine de caractère contenant un @

5 réponses
Avatar
Math
bonjour,

Une petite difficult=E9e, pour ne pas changer...

J'ai ce bout de code :
my $email =3D "email@domain.com";
print $email."\n";

Et il m'affiche "email.com", le @domain est consid=E9r=E9 comme =E9tant un
tableau je pense.

Comment je peux m'en sortir avec ce genre de bout de code, en =E9vitant
de devoir modifier la variable $email. (parrce que j'avais
=E9ventuellement song=E9 =E0 faire un substiture =3D~ s/@/\@/).

Dans quelle doc trouver des infos sur la gestion de cela ?

5 réponses

Avatar
ThM
my $email = "";
essayez '';
Avatar
Math
On 9 fév, 15:16, "ThM" wrote:
my $email = "";
essayez '';


Oui, cela fonctionne avec des simple quotes, mais le soucis est que ma
varaiable $email est initialisée depuis un fichier XML ;

En fait, j'ai un fichier XML :
<datas>
<email></email>
</datas>
J'utilise XML::Simple avec XMLin pour récupérer mon xml sous forme de
hash : je n'ai donc pas moyen de lui dire de mettre des simple
quotes !?

NB : Y'a pas une histoire de trantypage ?

Avatar
Paul Gaborit
À (at) 9 Feb 2007 06:14:08 -0800,
"Math" écrivait (wrote):
Une petite difficultée, pour ne pas changer...

J'ai ce bout de code :
my $email = "";
print $email."n";

Et il m'affiche "email.com", le @domain est considéré comme étant un
tableau je pense.


Tout à fait. Il suffit donc de bloquer le mécanisme d'interpolation
des variables. Deux manières :

my $email = "";

ou

my $email = '';

[... un autre message où il semble que le contenu de $email provient
de la lecture d'un fichier (XML mais ça ne change rien)...]

L'interpolation dea variables dans les chaînes n'a lieu que lors de
l'interprétation du code : celui qui est lu directement dans un script
(le cas ci-dessus), lors d'un appel à 'eval' ou alors dans une
structure du genre s/.../.../e (c'est le /e est important). En tous
cas, cette interpolation des variables n'a pas lieu sur ce qui est lu
depuis les fichiers de donnée (sauf à la demander explicitement).

Vous devez donc faire une fausse manip entre la lecture des données
depuis le fichier XML et le moment où ces données arrivent dans votre
variable...

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>

Avatar
Alex Marandon
Math wrote:

On 9 fév, 15:16, "ThM" wrote:
my $email = "";
essayez '';


Oui, cela fonctionne avec des simple quotes, mais le soucis est que ma
varaiable $email est initialisée depuis un fichier XML ;

En fait, j'ai un fichier XML :
<datas>
<email></email>
</datas>
J'utilise XML::Simple avec XMLin pour récupérer mon xml sous forme de
hash : je n'ai donc pas moyen de lui dire de mettre des simple
quotes !?


Étrange, chez moi XML::Simple met bien des simples quotes :

$VAR1 = {
'email' => ''
};

C'est ce que me donne le script suivant :

use XML::Simple;
use Data::Dumper;

print Dumper XMLin(<<'END');
<datas>
<email></email>
</datas>
END

__END__


NB : Y'a pas une histoire de trantypage ?


C'est quoi ? C'est quand les variables changent de sexe ?-)


Avatar
Paul Gaborit
À (at) Thu, 01 Mar 2007 07:42:59 GMT,
Alex Marandon écrivait (wrote):
[...]
Étrange, chez moi XML::Simple met bien des simples quotes :

$VAR1 = {
'email' => ''
};


Là, ce n'est pas XML::Simple qui met les apostrophes. C'est
Data::Dumper.

Le choix entre apostrophes ou guillemets n'a de sens que lorsqu'on
écrit une chaîne de caractères dans un script. Si la chaîne provient
d'ailleurs (lecture d'un fichier, par le réseau, etc.), la question ne
se pose plus : il n'y a pas d'interpolation des variables ou des
caractères spéciaux sauf demande explicite du programmeur (par exemple
via un appel à 'eval').

--
Paul Gaborit - <http://perso.enstimac.fr/~gaborit/>
Perl en français - <http://perl.enstimac.fr/>