OVH Cloud OVH Cloud

Perl => Caractere ^M recalcitrant ...

2 réponses
Avatar
Stephane Demeleumester
Bonjour,

J'ai un petit probleme de ^M recalcitrant .....

voici une petite partie de mon code :

chomp ($entree=<STDIN>);
@clienthostname = split (/ /,$entree);
$clienthostname = @clienthostname[1];
chop ($clienthostname);

Si je me souviens bien, chomp doit retirer le ^M ... mais la je suis oblige
de rajouter un chop.

Resume :

1 chomp + 1 chop = ^M supprime
1 chomp + XX chomp = ^M pas supprime
1 chomp = ^M pas supprime
1 chop = ^M pas supprime
2 chop = ^M supprime
3 chop = ^M supprime + une lettre de l'entree stdin ....

J'aurais prefere utiliser QUE des chomp, de façon a ne pas "tronquer"
l'entree .....

Une solution ?

2 réponses

Avatar
dominix
Stephane Demeleumester wrote:
Bonjour,

J'ai un petit probleme de ^M recalcitrant .....

voici une petite partie de mon code :

chomp ($entree=<STDIN>);
@clienthostname = split (/ /,$entree);
$clienthostname = @clienthostname[1];
chop ($clienthostname);

Si je me souviens bien, chomp doit retirer le ^M ... mais la je suis
oblige de rajouter un chop.

Resume :

1 chomp + 1 chop = ^M supprime
1 chomp + XX chomp = ^M pas supprime
1 chomp = ^M pas supprime
1 chop = ^M pas supprime
2 chop = ^M supprime
3 chop = ^M supprime + une lettre de l'entree stdin ....

J'aurais prefere utiliser QUE des chomp, de façon a ne pas "tronquer"
l'entree .....

Une solution ?


une demonstration

# perl -le '$_="toto";print;chop;print;chop;print;chop;'
toto
tot
to
# perl -le '$_="toto";print;chomp;print;chomp;print;chomp;'
toto
toto
toto

CAD chop vire le dernier caractere tandis que chomp nettoie ce que perl
connais sous l'appellation $/ ce qui nous donne comme indication que
1) sois la saisie n'est pas faite sur la meme plateforme,
2) sois $/ a ete bidouille.
utilise donc un tr/15// (par exemple)

Avatar
panx
une demonstration

# perl -le '$_="toto";print;chop;print;chop;print;chop;'


# perl -le '$_="toto";print;chop;print;chop;print;'

suffit pour ta demo