Hi Danie,obwohl ich persönlich dazu neige Perl einzusetzen, versuche ich meinen Beitrag so objektiv wie möglich zu gestalten. ;-)
Nach meiner Erfahrung ist Perl, gerade mod_perl wie ich las, wesentlich schneller als das PHP Modul. Du erwähntest, dass eine Suchmaschine implementiert werden soll? Es ist in der Tat so, dass es dem Programmierer unter PHP sehr leicht gemacht wird. Es gibt eine ganze Reihe Routinen bzw. Funktionen, die der Coder nur benutzen brauch. Oftmals hast Du auf die Performance dann aber gar keinen Einfluss. Außerdem fällt auf, dass diese immer wieder überarbeitet werden, bzw. neue Funktionen auftauchen, die das Selbe tun.
Ein interessanter Artikel dazu: http://tnx.nl/php
Auch was die Prozess-Struktur angeht, würde ich Perl den Vorzug geben. Wenn ich mir mit PHP eine Falle (Loop) gestellt habe, dann muss ich warten bis die maximale Ausführungszeit eines Skriptes erreicht ist. Wenn das Teil dann auch noch anfängt, sich meinen Speicher einzuverleiben, dann habe ich den Salat. Da ein Perlskript aber immer einen eigenen Prozess startet, kann ich den in der Shell einfach killen. Ich muss aber dazu sagen, dass ich nicht sicher weiß, ob sich das mit mod_perl auch so verhält, da ich es noch nicht eingesetzt habe.
PHP und Perl sind syntaktisch in der Tat sehr ähnlich, deshalb würde ich sagen, dass es von Lernaufwand keinen großen Unterschied macht. Jedoch ist unter Perl eher der Geist des Programmierers gefragt, was mich persönlich eher reizt. In einigen Fällen wirst Du unter PHP eine Funktion finden, die Dein Problem löst, wohingegen Du das Problem unter Perl selbst lösen musst.
In der Verarbeitung von regulären Ausdrücken, kann PHP es meiner Ansicht nach mit Perl nicht aufnehmen. Was ich mir da machmal einen abgebrochen habe. Da habe ich drei Stunden gesessen, was ich unter Perl in 5 Minuten gemacht habe. Ich muss aber dazu sagen, dass ich Perl zuerst gelernt hatte.
Auch finde ich die Umsetzung des Referenzierens, bzw. Dereferenzierens in Perl wesentlich besser durchdacht. Man hat hier meiner Ansicht nach weitaus mehr Möglichkeiten. Ich kann sogar Referenzen auf komplette Subfunktionen setzen. Ich bin mir nicht sicher, ob das unter PHP auch so einfach ist.
Stichwort: Datenstrukturen.
Was Perl klar und übersichtlich aufteilt (Arrays, Hashes) löst PHP alles mit Arrays, bzw. assoziativen Arrays. Ich denke das ist Geschmackssache, für mich war das am Anfang sehr verwirrend. Hier kommen unter Perl jetzt die Referenzen ins Spiel, womit sich seit 5.006 sehr komplexe Datenstrukturen durchaus übersichtlich erzeugen lassen (Array of Hashes, Hash of Hashes oder umgekehrt).
Eine Stärke von PHP ist das Includieren. Hier hat der Perlprogrammierer ganz klar den Nachteil. Perl geht hier eher den Weg der Objektorientierung. Sprich Du programmierst Objekte, bzw. Klassen, die in Packages gepackt werden, damit Du zur Laufzeit Instanzen darauf erzeugen kannst. Das Ganze ist für mich schon sehr C ähnlich. Unter PHP kannst andere PHP Skripte einfach Einbinden und fertig. Der komplette Code ist dann voll verfügbar. Absichern lässt sich das auch recht simpel, indem im aufrufenden Skript eine Konstannte definiert wird. Im includierten Skript kannst diese dann abfragen, und nötigenfalls exiten.
Die Verarbeitung von Signalen (POSIX) ist in beiden Sprachen recht gut implementiert. Da schenken sie sich also nichts.
Dann hätten wir da die Möglichkeit C, bzw. AssemblerCode in die Skripte einzubinden. Gerade hier sehe die einen sehr großen Vorteil Perls gegeüber PHP. Es ist nun einmal so, dass Hochsprachen wesentlich restriktiver mit Datentypen umgehen. Auch muss Speicher nicht reserviert, bzw. alloziert werden. Gerade hierdurch werden Perl oder PHP niemals an die Performance von C heranreichen zumal auch noch das aufsührende Organ (Interpreter oder Modul) dazwischen hängt. Diesem Umstand kann Rechnung getragen werden, indem an heiklen Stellen direkt C eingesetzt wird. Dann kompilierst Du die Anwendung und wirst feststellen, dass die Bereiche die in C geschrieben wurden wirklich sehr schnell sind.
Abschließend müssen dann natürlich die CPAN Module erwähnt werden. Eine derartige Plattform an OpenSource habe ich sonst in der Art noch nicht gefunden, wenn ich freshmeat und sourceforge mal außer Acht lasse. Hier geht es ja in erster Linux meist um Unix/Linux Software. Solltest Du unter Windows entwickeln wollen (Apache/ActivePerl), dann kannst Du auf deren Server die PPMs ziehen und sehr simpel nachinstallieren. Ich als Debianer habe es sogar noch einfacher, weil die gängigen Module schon im Repository enthalten sind. Ich installier die nach und Ruh' iss.
Geh' einfach mal schauen:
http://search.cpan.org/
http://www.activestate.com/
Was Dein PHP Buch angeht, kann ich nur soviel sagen: Ich habe dazu gar kein Buch gebraucht. Es gibt im Netz so viele Ressourcen zu PHP und Perl. Also wer sich da Bücher kauft, schmeißt nach meiner Ansicht das Geld zum Fenster hinaus. Das lässt sich besser investieren.
So jetzt hoffe ich mal, dass es trotz der Perl-Lastigkeit noch objektiv war und wünsche viel Erfolg bei der Bewältigung Deiner Herausforderung.
-uw
Datum: 06.05.2006-21:15
