"Trimmen" von Skalaren
Lude
- perl
0 Andreas0 Christian Kruse0 Christian Kruse0 Andreas0 Christian Kruse0 Lude0 Christian Kruse0 Lude0 Christian Kruse0 Lude
0 Struppi0 Erwin
Hi,
wie trimmt man ein Skalar, also statt
' Harry ist doof '
'Harry ist doof'
?
Gruss,
Lude
Direkt weiß ich's auch nicht. Ein Workaround wäre aber:
$text = ' Harry ist doof ';
$text =~ s/^\s*//;
$text =~ s/\s*$//;
Hi,
wie trimmt man ein Skalar, also statt
' Harry ist doof '
'Harry ist doof'
?Gruss,
Lude
Hallo Andreas,
$text = ' Harry ist doof ';
$text =~ s/^\s*//;
$text =~ s/\s*$//;
Statt dem Asterix besser ein Plus. Ein * verlangsamt die Ausdrücke unnötig. Zum Vergleich:
ckruse@sunshine:~ $ cat test.pl
#!/usr/bin/perl -w
use strict;
use Benchmark qw(timethese);
my $data = (' ' x 10000).'Blub blahr blub'.(' ' x 10000);
timethese(1000000,{
oplus => sub {
$data =~ s/^\s+//o;
$data =~ s/\s+$//o;
},
plus => sub {
$data =~ s/^\s+//;
$data =~ s/\s+$//;
},
normal => sub {
$data =~ s/^\s*//;
$data =~ s/\s*$//;
}
}
);
ckruse@sunshine:~ $ perl test.pl
Benchmark: timing 1000000 iterations of normal, oplus, plus...
normal: 4 wallclock secs ( 3.63 usr + 0.01 sys = 3.64 CPU) @ 274725.27/s (n=1000000)
oplus: 2 wallclock secs ( 1.23 usr + 0.00 sys = 1.23 CPU) @ 813008.13/s (n=1000000)
plus: 0 wallclock secs ( 1.19 usr + 0.00 sys = 1.19 CPU) @ 840336.13/s (n=1000000)
ckruse@sunshine:~ $
Interessant dabei finde ich, dass das Beispiel gut zeigt, dass das o-Flag eine
zweischneidige Sache ist. Es kann Code schneller, aber auch langsamer machen. Die perldoc
sagt dazu, dass komplizierte Ausdrücke oft mit dem o-Flag schneller sind aber einfache
Ausdrücke dagegen oft mit ohne o-Flag. *Sehr* bezeichnend finde ich, wie extrem viel
langsamer der *-Ausdruck ist. Aber eigentlich logisch. Ich habe mal die Automaten zu den
Ausdrücken aufgezeichnet:
<img src="http://www.defunced.de/pics/automat1.png" border="0" alt="">
Daraus wird ersichtlich, dass der erste Ausdruck finit ist, während der zweite Ausdruck in
einem infiniten Automaten endet. Das bedeutet, dass die RegEx-Engine erst erkennen muss,
dass sie in einer Endlos-Schleife gelandet ist, bis der Audruck zwangs-terminiert wird.
Hm, interessantes Thema, vielleicht sollte ich mal einen FA darüber schreiben.
Grüße,
CK
Tach nochmal,
[...] Asterix [...]
Ich meinte natürlich Asterisk ;-)
Grüße,
CK
Wow, mußt Du eine Langeweile haben... ;-)
Hallo Andreas,
$text = ' Harry ist doof ';
$text =~ s/^\s*//;
$text =~ s/\s*$//;Statt dem Asterix besser ein Plus. Ein * verlangsamt die Ausdrücke unnötig. Zum Vergleich:
ckruse@sunshine:~ $ cat test.pl
#!/usr/bin/perl -wuse strict;
use Benchmark qw(timethese);my $data = (' ' x 10000).'Blub blahr blub'.(' ' x 10000);
timethese(1000000,{
oplus => sub {
$data =~ s/^\s+//o;
$data =~ s/\s+$//o;
},
plus => sub {
$data =~ s/^\s+//;
$data =~ s/\s+$//;
},
normal => sub {
$data =~ s/^\s*//;
$data =~ s/\s*$//;
}
}
);ckruse@sunshine:~ $ perl test.pl
Benchmark: timing 1000000 iterations of normal, oplus, plus...
normal: 4 wallclock secs ( 3.63 usr + 0.01 sys = 3.64 CPU) @ 274725.27/s (n=1000000)
oplus: 2 wallclock secs ( 1.23 usr + 0.00 sys = 1.23 CPU) @ 813008.13/s (n=1000000)
plus: 0 wallclock secs ( 1.19 usr + 0.00 sys = 1.19 CPU) @ 840336.13/s (n=1000000)
ckruse@sunshine:~ $Interessant dabei finde ich, dass das Beispiel gut zeigt, dass das o-Flag eine
zweischneidige Sache ist. Es kann Code schneller, aber auch langsamer machen. Die perldoc
sagt dazu, dass komplizierte Ausdrücke oft mit dem o-Flag schneller sind aber einfache
Ausdrücke dagegen oft mit ohne o-Flag. *Sehr* bezeichnend finde ich, wie extrem viel
langsamer der *-Ausdruck ist. Aber eigentlich logisch. Ich habe mal die Automaten zu den
Ausdrücken aufgezeichnet:<img src="http://www.defunced.de/pics/automat1.png" border="0" alt="">
Daraus wird ersichtlich, dass der erste Ausdruck finit ist, während der zweite Ausdruck in
einem infiniten Automaten endet. Das bedeutet, dass die RegEx-Engine erst erkennen muss,
dass sie in einer Endlos-Schleife gelandet ist, bis der Audruck zwangs-terminiert wird.Hm, interessantes Thema, vielleicht sollte ich mal einen FA darüber schreiben.
Grüße,
CK
Hallo Andreas,
Wow, mußt Du eine Langeweile haben... ;-)
Nein, nur Interesse.
Grüße,
CK
Hi,
Wow, mußt Du eine Langeweile haben... ;-)
Nein, nur Interesse.
so viel Interesse haben aber nur die Besten der Besten der Besten oder recht einfache Trolle. Ueblicherweise.
Gruss,
Lude
Hallo Lude,
Wow, mußt Du eine Langeweile haben... ;-)
Nein, nur Interesse.
so viel Interesse haben aber nur die Besten der Besten der Besten oder recht einfache Trolle.
Ueblicherweise.
Und was willst du mir damit sagen?
Grüße,
CK
Hi,
Wow, mußt Du eine Langeweile haben... ;-)
Nein, nur Interesse.
so viel Interesse haben aber nur die Besten der Besten der Besten oder recht einfache Trolle.
Ueblicherweise.
Und was willst du mir damit sagen?
ich wollte Deine Coolness testen. Sonst gehst Du ja schon mal hoch wie der Pruegelprinz.
Weiterhin viel Erfolg,
Gruss,
Lude
Hallo Lude,
Und was willst du mir damit sagen?
ich wollte Deine Coolness testen. Sonst gehst Du ja schon mal hoch wie der Pruegelprinz.
Unterlasse sowas bitte. Danke.
Grüße,
CK
Hi, CK,
Und was willst du mir damit sagen?
ich wollte Deine Coolness testen. Sonst gehst Du ja schon mal hoch wie der Pruegelprinz.
Unterlasse sowas bitte. Danke.
Moment, das ist mir aber ganz ganz wichtig. Wenn Du wieder anfaengst zu stammeln, ich sei ein Troll, dann missfiele mir das aber zutiefst.
Also unterlasse Dich bitte.
Gruss,
Lude
Hi,
wie trimmt man ein Skalar, also statt
' Harry ist doof '
'Harry ist doof'
?
Das ist eine FAQ.
perlfaq4 - Data Manipulation
How do I strip blank space from the beginning/end of a string?
Struppi.
Hi Lude,
wie trimmt man ein Skalar, also statt
' Harry ist doof '
'Harry ist doof'
?
ist nicht schwierig, klick:
http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.7.2.4
entfernt auch Tabulatoren.
Gruss aus Linkenheim, Rolf