Zu Ihrer Information: Die Zeichenfolgengleichheit in Perl wird vom Bediener getestet eq.
A. Rex
5
Ein bisschen Klarstellung zu allen Antworten, die Sie erhalten haben: s/^\s+|\s+$//g;vs s/^\s*//; s/\s*$//;Letzteres ist die (etwas) idiomatischere Methode, um dies zu tun, da das Starten der Regex-Engine in diesem Fall tatsächlich schneller ist als der Wechsel. Weitere Informationen hierzu finden Sie in Jeffrey Friedls Mastering Regular Expressions. (Es sei denn, dies wurde in einer neueren Version von Perl behoben. In diesem Fall korrigiert mich bitte jemand!)
Hugmeir
4
Ich komme aus Java und .NET und bin fast schockiert, dass dies nicht in die Sprache integriert ist! DANKE ALLEN!
Landon Kuhn
3
@ landon9720, es ist etwas: Scalar :: Util hat Trimm und ist Kern seit 5.7.3 - Das ist 2002!
@ mklement0 noch wird es jemals sein. Dies ist jedoch nicht relevant, da jeder Module aus dem CPAN verwenden sollte.
Ether
2
Warum sollte jeder Module von CPAN verwenden? Dies erschwert die Konsistenz, wenn Sie Perl aus Ihrer Linux-Distribution (Debian, Redhat, Ubuntu) in Kombination mit manuell installierten CPAN-Modulen verwenden. Es ist viel besser, wenn etwas in Perl mit Modulen gemacht werden kann, die als Pakete in der Linux-Distribution verfügbar sind
Marki555
@ Marki555-Module, die als Pakete in Ihrer Linux-Distribution verfügbar sind, stammen von CPAN - sie wurden gerade neu verpackt. Sie können im Allgemeinen das Packen eines bestimmten Moduls anfordern, wenn dies noch nicht geschehen ist (die Debian-Leute sind besonders reaktionsschnell und hilfreich).
Ether
1
Ich weiß, dass sie auch von CPAN stammen ... Ja, im Allgemeinen kann ich ein neues Paket für Debian anfordern, aber es hilft mir nicht für meine installierte stabile Debian-Version ... Deshalb bevorzuge ich Paketmodule, verwende aber direkt CPAN, wenn wirklich gebraucht.
Marki555
4
@Ether Bei allem Respekt schätze ich es sehr zu wissen, dass dies ein Nicht-Kernmodul ist. In diesem Beitrag geht es um die Verwendung eines Moduls anstelle eines ziemlich einfachen Regex-Einzeilers. Wenn das Modul Kern ist, wäre ich viel offener dafür. Dies ist in diesem Fall relevant.
OnkelCarl
26
Es gibt keine eingebaute trimFunktion, aber Sie können Ihre eigene einfach mit einer einfachen Ersetzung implementieren:
sub trim {(my $s = $_[0])=~ s/^\s+|\s+$//g;
return $s;}
Für diejenigen, die Text :: CSV verwenden, habe ich diesen Thread gefunden und dann im CSV-Modul festgestellt, dass Sie ihn über den Schalter entfernen können:
$csv =Text::CSV->new({allow_whitespace =>1});
Die Logik ist insofern rückwärts, als Sie, wenn Sie sich entfernen möchten, auf 1 setzen. Hoffe das hilft jedem.
eq
.s/^\s+|\s+$//g;
vss/^\s*//; s/\s*$//;
Letzteres ist die (etwas) idiomatischere Methode, um dies zu tun, da das Starten der Regex-Engine in diesem Fall tatsächlich schneller ist als der Wechsel. Weitere Informationen hierzu finden Sie in Jeffrey Friedls Mastering Regular Expressions. (Es sei denn, dies wurde in einer neueren Version von Perl behoben. In diesem Fall korrigiert mich bitte jemand!)Antworten:
Hier ist ein Ansatz mit einem regulären Ausdruck:
Perl 6 wird eine Trimmfunktion enthalten:
Quelle: Wikipedia
quelle
Dies ist in String :: Util mit der folgenden
trim
Methode verfügbar :Anmerkung des Herausgebers:
String::Util
ist kein Kernmodul, aber Sie können es von CPAN mit installieren[sudo] cpan String::Util
.Drucke:
Es ist jedoch einfach genug, sich selbst zu tun:
quelle
Es gibt keine eingebaute
trim
Funktion, aber Sie können Ihre eigene einfach mit einer einfachen Ersetzung implementieren:oder zerstörungsfreie Substitution in Perl 5.14 und höher verwenden:
quelle
Nach diesem Perlmonk-Thread :
quelle
Vollständiges Howto in der Perfaq hier: http://learn.perl.org/faq/perlfaq4.html#How-do-I-strip-blank-space-from-the-beginning-end-of-a-string-
quelle
Für diejenigen, die Text :: CSV verwenden, habe ich diesen Thread gefunden und dann im CSV-Modul festgestellt, dass Sie ihn über den Schalter entfernen können:
Die Logik ist insofern rückwärts, als Sie, wenn Sie sich entfernen möchten, auf 1 setzen. Hoffe das hilft jedem.
quelle
Eine Option ist Text :: Trim :
quelle
Bewerben:
s/^\s*//; s/\s+$//;
darauf. Oder verwendens/^\s+|\s+$//g
Sie, wenn Sie Lust haben möchten.quelle
Ich verwende auch einen positiven Lookahead, um sich wiederholende Leerzeichen im Text zu kürzen:
quelle
Nein, aber Sie können den
s///
Substitutionsoperator und die\s
Whitespace-Zusicherung verwenden, um das gleiche Ergebnis zu erzielen.quelle