web-dev-qa-db-fra.com

Perl: fonction pour couper les espaces de début et de fin de chaîne

Existe-t-il une fonction intégrée pour ajuster les espaces de début et de fin tels que trim(" hello world ") eq "hello world"?

77
Landon Kuhn

Voici une approche utilisant une expression régulière:

$string =~ s/^\s+|\s+$//g ;     # remove both leading and trailing whitespace

Perl 6 inclura une fonction de trim:

$string .= trim;

Source: Wikipedia

82
Mark Byers

Ceci est disponible dans String :: Util avec la méthode trim:

Note de l'éditeur: String::Util n'est pas un module de base, mais vous pouvez l'installer à partir de CPAN avec [Sudo] cpan String::Util.

use String::Util 'trim';
my $str = "  hello  ";
$str = trim($str);
print "string is now: '$str'\n";

impressions:

la chaîne est maintenant 'bonjour'

Cependant, il est assez facile de faire soi-même:

$str =~ s/^\s+//;
$str =~ s/\s+$//;
80
Ether

Il n'y a pas de fonction intégrée trim, mais vous pouvez facilement implémenter la vôtre en utilisant une simple substitution:

sub trim {
    (my $s = $_[0]) =~ s/^\s+|\s+$//g;
    return $s;
}

ou en utilisant substitution non destructive dans les versions 5.14 et ultérieures de Perl:

sub trim {
   return $_[0] =~ s/^\s+|\s+$//rg;
}
26
Eugene Yarmash

Selon le fil de ce perlmonk :

$string =~ s/^\s+|\s+$//g;
9
inkedmn
8
Nanne

Pour ceux qui utilisent Text :: CSV, j'ai trouvé ce fil de discussion et puis remarqué dans le module CSV que vous pouviez le supprimer via un commutateur:

$csv = Text::CSV->new({allow_whitespace => 1});

La logique est inversée en ce sens que si vous souhaitez supprimer, vous devez définir la valeur 1. Go figure. J'espère que cela aide quelqu'un.

3
Douglas

Une option est Text :: Trim :

use Text::Trim;
print trim("  example  ");
3
Flimm

J'utilise aussi un lookahead positif pour couper les espaces répétés à l'intérieur du texte:

s/^\s+|\s(?=\s)|\s+$//g
3
Shaun McDonald

Appliquer: s/^\s*//; s/\s+$//; à elle. Ou utiliser s/^\s+|\s+$//g si vous voulez être chic.

2