Hallo fastix®,
Perl interpretiert zwar, aber verwendet eine etwas andere Methode um
zu dies vorzunehmen: Es kompiliert mehr oder weniger bei jedem Aufruf
die gesamte Datei
Das stimmt so nicht. Der Code wird in Syntax-Baeume transformiert, die
dann ausgefuehrt werden. Compilieren wuerde eine Code-Uebersetzung
(und sei es nur Bytecode) bedingen, die findet hier jedoch nicht
statt. Anders ist das bei Perl 6, wo die Scripte erst nach Parrot
uebersetzt und dann ausgefuehrt werden. *Dort* wird wirklich eine
Compilation vorgenommen.
und kann deswegen selbst Optimierungen vornehmen. Du bist also
nicht auf diesen verdichteten Code angewiesen.
Das stimmt so auch nicht. Durchaus macht Perl Optimierungen, die
jedoch ersetzen in keinem Fall einen durchdachten Algorithmus oder
Hand-Optimierungen. Belegbar mit einem ganz einfachen Beispiel:
ckruse@sunshine:~ $ perl test.pl
Benchmark: timing 1000 iterations of split1, split...
split1: 93 wallclock secs (71.20 usr + 0.24 sys = 71.44 CPU) @ 14.00/s (n=1000)
split: 38 wallclock secs (28.05 usr + 0.11 sys = 28.16 CPU) @ 35.51/s (n=1000)
ckruse@sunshine:~ $ cat test.pl
#!/usr/bin/perl -w
use strict;
use Benchmark;
my $data = 'abcxyz|' x 10000;
timethese(1000, {
'split' => sub {
my @pieces = split /|/ => $data;
},
'split1' => sub {
my @pieces = split /([^|]+)/ => $data;
}
}
);
eof
Wuerde Perl wirklich derart optimieren, wie du behauptet hast, so
muessten beide Varianten gleich schnell sein. Sie machen beide
das gleiche, sind aber technisch voellig unterschiedlich. Ich koennte
jetzt noch mehr Beispiele anbringen, stattdessen empfehle ich
'Effektiv Perl Programmieren' von Randall Schwartz ;)
Gruesse,
CK
So, wie ein Teil ist, ist das Ganze.