Lorsque je coupe une chaîne, je ne souhaite pas souvent conserver l'original. Ce serait bien d'avoir l'abstraction d'un sous-marin mais aussi de ne pas avoir à se soucier des valeurs temporaires.
Il se avère que nous pouvons faire tout cela, comme perlsub explique:
Tous les arguments passés dans le show dans le tableau @_
. Par conséquent, si vous appelez une fonction avec deux arguments, ceux-ci seront stockés dans $_[0]
et $_[1]
. Le tableau @_
est un tableau local, mais ses éléments sont des alias pour les paramètres scalaires réels. En particulier, si un élément $_[0]
est mis à jour, l'argument correspondant est mis à jour (ou une erreur se produit s'il n'est pas modifiable).
Dans votre cas, trim
devient
sub trim {
for (@_) {
s/^ \s+ //x;
s/ \s+ $//x;
}
wantarray ? @_ : $_[0];
}
Rappelez-vous que map
et for
sont des cousins, donc avec la boucle trim
, on n'a plus besoin map
. Par exemple
my $line = "1\t 2\t3 \t 4 \t 5 \n";
my ($a, $b, $c, $d, $e) = split(/\t/, $line);
print "BEFORE: [", join("] [" => $a, $b, $c, $d), "]\n";
trim $a, $b, $c, $d;
print "AFTER: [", join("] [" => $a, $b, $c, $d), "]\n";
Sortie:
BEFORE: [1] [ 2] [3 ] [ 4 ]
AFTER: [1] [2] [3] [4]
Je suis nerveux à l'idée d'une dépendance à l'introduction d'un module qui dit « Version finale A partir de cette chaîne de version :: Util n'est plus en cours de développement ou d'être pris en charge. " –
Si nous allons installer un module CPAN, nous pourrions aussi bien utiliser celui qui fait le mieux le travail: ['String :: Strip'] (http://p3rl.org/String::Strip). Voir http://www.illusori.co.uk/perl/2010/03/05/advanced_benchmark_analysis_1.html – daxim
Je ne l'ai pas essayé, mais le test d'acidité pour ces types de modules est de savoir s'ils suppriment des choses comme Unicode 0x3000 de la chaîne. Si ce n'est pas le cas, peut-être que ce n'est pas un bon remplacement. Jetant un coup d'œil sur le code source, String :: Strip utilise la fonction C 'isspace' pour enlever les espaces et n'a aucune conscience de l'unicode, donc il se comportera différemment de ce qui précède. –