So, jetzt bin ich auch mal grad am Benchmarken gewesen.
use Benchmark;
my $text = 'test\n';Hast du dir $text mal ausgeben lassen?
my $text = "test\n";
sonst gibt's keine abschliessende Newline und du misst zwar etwas,
aber bestimmt etwas falsches :-)
Jaja, hatt ich auch schon daran gedacht (deshalb meine Aussage mit dem Mechanismus, mir schwante sowas bereits).
Das Problem, wie auch schon angedeutet hast, ist (vermutlich) dass die Zuweisung eines neuen Strings natürlich auch Zeit in anspruch nimm und wir das ja nicht messen wollen.
Benchmark::cmpthese(-1, {
'regExp$' => sub { $text =~ s/\n$//; },
'regExp' => sub { $text =~ s/\n//; },
'chomp' => sub { chomp $text; },
});Das Problem ist, dass bei $text nur bei der ersten Iteration die
Newline weggehackt wird und alle anderen haben dann nur noch 'test'
zu behandeln. Wir messen also wiederum nicht das, was wir wollen.Kleines Update zum Benchmark:
use Benchmark;
my $text2 = "befehl -cvzf test parameter\n";
## möglichst Realitätsnahe
my $text = $text2;Benchmark::cmpthese(2000000, {
'regExp$' => sub { $text=$text2; $text =~ s/\n$//; },
'regExp' => sub { $text=$text2; $text =~ s/\n//; },
'chomp' => sub { $text=$text2; chomp $text; },
});Nunja, das mit den $text=$text2 ist zwar auch nicht das, was wir
messen wollen, aber ohne messen wir einfach das falsche. Nun, deshalb
habe ich einfach fix 2000000 Iterationen veranschlagt, somit ist
$text=$text2 bei allen drei Tests nahezu Konstant und wir messen nur
die Unterschiede bei der Newline-wegtrennung. Zudem musste ich diesen
Benchmark einige Male nacheinander durchführen um sicher zu gehen,
dass die Ergebnisse immer in etwa dieselben bleiben (da $text=$text2
viel länger dauert als Newlinewegtrennung können die Ergebnisse durch
aus falsch sein, über mehrmaliges Iterieren kann man jedoch bei
fast immerwährend gleichen Ergebnissen eine These formulieren).
jaja nicht einfach das Benchmarking. Ich wollte mich auch zuerst davor drücken (war ja auch schon spät) aber letztlich siegte meine persönliche Neugier und auch wenn collblue ein bisschen dogmatisch rüberkommt, scheint er ja nicht total ignorant zu sein. Insofern hoffte ich einerseits auf Verbesserungen von Anderen an meinem Code (was passiert ist) und das ich coolblue zumindest einen Ansatz zeigen konnte mit dem er was anfangen kann (was ja auch passiert ist).
Es hat sich also für alle gelohnt ;-)
Danke für deine Benchmark's Stuppi, hat mich grad motiviert selber
auszuprobieren.
gern geschehen :-)
Struppi.