[Perl] Suppr d'espaces en début de ligne

Résolu
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   -  
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   -
Salut à tous,

J'ai un petit souci avec une expression régulière Perl.
Je fais un test avec le petit programme suivant :
#!/usr/bin/perl -w
use strict;

my $text = " hey bonjour\n         \t          pof pif";

print "$text\n";
$text =~ s/^[ \t]+//g;
print "$text\n";


Normalement, le deuxième print devrait m'afficher
hey bonjour
pof pif


Au lieu de ça, le remplacement semble ne fonctionner que sur la première ligne ?! Ça me donne donc :
hey bonjour
                          pof pif


J'ai testé ce bout de code sous windows avec cygwin et sur une debian, le résultat est le même.

Je ne comprends pas du tout ce comportement : je dis bien supprime moi (s) tout espace ou tabulation ([ \t]+) et ce pour toutes les occurrences (/g).

Quelqu'un voit pourquoi ça fonctionne pas et surtout quelle serait la solution à ce souci ?

Merci
@++
A voir également:

2 réponses

wiwimagique Messages postés 481 Date d'inscription   Statut Membre Dernière intervention   108
 
L'accent circonflexe indique que les espaces doivent être en début de chaîne uniquement.

Si tu veux tout enlever, enlève le ^
0
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114
 
Oui, je sais. Désolé, je ne l'ai pas redit dans ma phrase récapitulative. Mais, l'exemple où je montre la différence d'affichage entre ce que j'attends et ce que j'obtiens montre que je ne veux supprimer que les espaces en début de ligne avant le texte.

Merci qd même.
@++
0
batmat Messages postés 1871 Date d'inscription   Statut Membre Dernière intervention   114
 
Bon, j'ai trouvé la réponse :

Il suffit de mettre /mg au lieu de simplement /g. Ça fait considérer la chaîne de caractères comme une chaîne multi-ligne.

Sinon, le ^est compris comme le début d'une chaîne et non tout caractère suivant \n.

@++
0