* Matthias Fechner <idefix(at)fechner.net> [021207 12:13]:
Hallo Matthias,
> * Christian Lackas <c.lackas(at)kfa-juelich.de> [07-12-02 00:22]:
> > in Perl würdest du natürlich auch tr nehmen:
> > perl -pi.bak -e 'tr/ //s' dateiname
> > (legt auch noch ein Backup als »dateiname.bak« an).
> Aber nicht, wenn ich nur ein paar Leerzeichen in einer Variable
> ersetzen will und ein regexp ist zudem bestimt noch schneller oder
> liege ich da falsch?
dann würdest du
$var =~ tr/ //s;
benutzen und das ist natürlich viel schneller als mit regulären
Ausdrücken und dem s/// Operator rumzuhantieren, da es nur mit echten
Zeichen arbeitet. Du kannst es ja mal ausprobieren:
perldoc Benchmark
BTW: Hast du dein »$foo=~s/\s+/\s/g;« mal ausprobiert? Das wird nicht
wirklich das tun, was du vorhattest:
perl -le '$_="Hallo\n Welt"; s/\s+/\s/g; print'
HallosWelt
und nicht
perl -le '$_="Hallo\n Welt"; tr/ //s; print'
Hallo
Welt
Zum einen steht \s für eine ganze Zeichenklasse (Leerzeichen, LineFeed,
CarriageReturn, FormFeed) ersetzt also mehr als du wolltest (z.B. auch
mehrere Leerzeilen); zum anderen kann es aus dem gleichen Grund auch
nicht auf der rechte Seite stehen (sprich: '\s' ist dort einfach 's').
Desweiteren braucht man einzelne Zeichen ja nicht nochmal zu ersetzen.
Das ergibt also insgesamt:
$foo =~ s/ +/ /g;
Aber hier ist die Verwendung von tr/// nicht nur kürzer sondern auch
noch schneller, daher soll man darauf zurückgreifen.
Gruß
Christian
-- Beim Griff in die eigene Tasche stellt man immer wieder fest, daß die öffentliche Hand schon vorher drin war. http://www.lackas.net/ Perl Delphi Linux MP3 Searchengines Domainchecker To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org with "unsubscribe de-bsd-questions" in the body of the messageReceived on Sat 07 Dec 2002 - 14:00:08 CET