[quote=weismat,10.Nov..2006, 15:48]Das mit den Referenzen hat schon mal einiges gebracht (der Overhead ist um mehr als die Hälfte geschrumpft) - trotzdem ist der Overhead durch den Funktionsaufruf immer noch hoch.
Gibt es noch so Tricks wie statische Funktionsaufrufe wie in C? Ich rufe eine Funktion 1000-1500 mal die Sekunde auf.[/quote]
Ich denke es ist wohl noch eher entscheidend was du genau in deinen Funktionen machst. Und manchmal kann dann auch eval() helfen.
Ich hatte mal den Fall das jemand mehrere Unterschiedliche Regexe auf paar Tausend Dateien anwenden wollte.
Er hatte alle Regexe hintereinander mit if {} elsif {} elsif {} getestet. Als er dann die Regexe in Variablen (Strings) speicherte und dann mit einer foreach Schleife arbeitete lief sein programm auf einmal ca 30 mal länger.
Problem war halt das die Regexen immer wieder mit jedem durchlauf neu compiliert wurden. Mit qr// lief es dann wieder Performant.
eval() kann in der Sitaution auch nochmal die Performance verbessern. Du baust dir sozusagen deinen Perl Code im programm als String zusammen, mit statischen Inhalten, und führst ihn dann erst aus.
Das lohnt sich aber nur wenn du z.B. Variablen hast die sich in der Funktion nicht mehr verändern, aber vom Benutzer übergeben werden. (Funktionsparameter)
Wenn du solch eine Funktion oft aufrufst (1000-1500 zähle ich schon zu oft), kann das natürlich einiges bringen, da nicht immer wieder jede Variable interpoliert werden muss. Hängt aber wohl von Fall zu Fall ab ob es Performance Vorteile bringt. Zusätzlich leidet die Lesbarkeit deutlich dadrunter.
Ansonsten kannst du wohl das meiste noch heraus holen wenn du deine Regexe Optimierst.
Da du ja von String Manipulation sprachst denke ich mal du wirst einige Regexe benutzen.\n\n
<!--EDIT|sid burn|1163176808-->
Nicht mehr aktiv. Bei Kontakt: ICQ: 404181669 E-Mail: perl@david-raab.de