Hallo! Da ich vor kurzem mal wieder Perl programmieren musste, sind mir einige Dinge aufgestoßen, die nun schriftlich auf http://www.thomas-guettler.de/vortraege/python/einfuehrung.html#17 zu sehen sind. Wenn noch jemand Argumente findet kann sie mir ja per Email zuschicken. Im Folgenden der Abschnitt als Text: Warum nicht Perl Perl ist leider verbreiteter als Python. Im Folgenden ein paar Dinge, die mir an Perl nicht gefallen: * In Perl können die Klammern bei einem Funktionsaufruf fehlen. Das verschlechtert die Lesbarkeit des Quelltextes. #Perl $obj->foo; #Python obj.foo() * print "5" + 3; Obiges Beispiel führt in Perl zu keiner Fehlermeldung. Wenn eine Zahl zu einem String addiert wird, handelt es sich um einen Programmfehler. Perl konvertiert automatisch den String "5" zu einer Zahl. Dieses Verhalten führt jedoch dazu, dass Programmfehler übersehen werden. Die explizite schreibweise in Python print int("5") + 3 sagt mir mehr zu. * $_ Perl verwendet viele "magische" Variablen ($_, @_, $!, $&, ...), was den Quelltext sehr unverständlich macht. * Builtin Regular Expresssions: In Python sind Reguläre Ausdrücke mittels einer Bibliothek verfügbar. In Perl sind sie Teil der Syntax der Sprache. Ich finde den Ansatz von Python sauberer. * Zeichenketten werden in Perl mit dem "eq" Operator und nicht mit "==" verglichen. In Python gibt es nur einen Vergleichsoperator, was besonders für Anfänger einfacher ist. * Die Print-Anweisung in Python zeigt meist sinnvollere Informationen: #Perl: @array=(9, 10, 11); print @array; ---> 91011 #Python: array=[9, 10, 11] print array ---> [9, 10, 11] * Variablen brauchen in Perl nicht initialisiert zu werden: @array=undef; push(@array, 1); print @array; #oder: $myint=undef; $myint++; In Python müssen Variablen mit einer Zuweisung initialisiert werden. Fehler im Quelltext fallen so früher auf: array=[] array.append(1) * Wird auf nicht existierende Elemente in einem Hash zugegriffen, erhält man in Python eine Exception, in Perl jedoch nicht: #Perl: my (%myhash); $var=$myhash{"nicht existent"}; print "meine Variable: $var\n"; * Möchte man in Perl zwei Listen mit return als Funktionsergebnis zurückgeben, so muss man eine andere Syntax verwenden, als wenn man zwei Strings oder Integerwerte zurückgibt: # Perl sub return_two_lists{ my @list1; my @list2; # .... Listen füllen return (\@column_alignments, \@widths); } my ($list1_ref, $list2_ref) = return_two_lists(); my @list1 = @$list1_ref; my @list2 = @$list2_ref; In Python ist die Syntax einheitlich: Es ist gleich ob man Listen, Dictionaries, Integers, Methoden oder Objekte zurückgibt. # Python def return_two_lists(): list1=[] list2=[] # .... Listen füllen return (list1, list2) (list1, list2) = return_two_lists() Mit "use strict;" lassen sich einige der Schwachstellen von Perl abschalten. Man kann jedoch nicht davon ausgehen, dass fremder Quelltext "use strict" verwendet. -- Thomas Guettler <guettli@thomas-guettler.de> http://www.thomas-guettler.de _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Sunday 13 June 2004 21:02, Thomas Guettler wrote:
Hallo!
Da ich vor kurzem mal wieder Perl programmieren musste, sind mir einige Dinge aufgestoßen, die nun schriftlich auf
Ich denke da vergleicht du Äpfel mit Birnen. So als würdest du versuchen einen Mantafahrer von deinem 30-Tonner zu überzeugen. In dem du ihm versuchst sein Auto madig zu reden, weil es kein Zwischengas hat und sein Tank nur ein Zehntel von deinem fast. Perl ist für Leute die normalerweise C programmieren und mal eben schnell was automatisieren wollen. Guck die die Syntax der (Quasi-)Objekte an. "objekt->funktion" das ist für ein C-Programmierer ein Zeiger auf eine Funktion und keine Methode. Da fühlt er sich gleich heimisch. Aber um die Munition zu geben, behaupte ich mal, das perl-Code der mehr als 900 Zeilen hat, meist nicht mehr debuggbar ist. Wenn z.B. Klammern Fehlen wird als Fehlerquelle immer die letzte Zeile des Codes bzw. Funktion genannt. Aber das ist für Perl-Programmierer belanglos weil selten solange Perl-Scripte geschrieben werden. Ganz im gegenteil. Wo immer eine Perl-Diskussion ausbricht ist spätestens der 15. Beitrag Pro-Perl ein Beispiel-Code der aus einer Zeile besteht, der das tut, was ein gepflegter Code in 30 Zeilen tun. Perl ist optimal für "Einweg-Code" den nie wieder jemand ansehen, verstehen oder gar verändern muss.
* Builtin Regular Expresssions: In Python sind Reguläre Ausdrücke mittels einer Bibliothek verfügbar. In Perl sind sie Teil der Syntax der Sprache. Ich finde den Ansatz von Python sauberer.
Perl ist als "Regular-Expresssions-Sprache" erfunden worden. Es sollte Log-Daten analysieren. Ich glaube Perl ist immernoch um einiges schneller in dieser Disziplin als Python. Das ist so, als wunderte man sich darüber das ein Flugzeug Räder hat, wo es doch fliegen soll. MfG Olaf _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
On Mon, Jun 14, 2004 at 06:32:26AM +0200, Olaf 'Rübezahl' Radicke wrote:
On Sunday 13 June 2004 21:02, Thomas Guettler wrote:
Hallo!
Da ich vor kurzem mal wieder Perl programmieren musste, sind mir einige Dinge aufgestoßen, die nun schriftlich auf
Ich denke da vergleicht du Äpfel mit Birnen.
Das ist mir klar. Aber für Leute die weder Äpfel noch Birnen kennen, ist es ggf. hilfreich beides einmal zu vergleichen. Danke für deine Hinweise, Thomas -- Thomas Guettler <guettli@thomas-guettler.de> http://www.thomas-guettler.de _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
Thomas Guettler wrote:
* Builtin Regular Expresssions: In Python sind Reguläre Ausdrücke mittels einer Bibliothek verfügbar. In Perl sind sie Teil der Syntax der Sprache. Ich finde den Ansatz von Python sauberer.
Das läßt sich (leider) veralgemeinern: Perl hat viele Dinge in die Sprache eingebaut, die in eine Bibliothek gehörten: Regex, sockets. (Mehr fallen mir gerade nicht ein, aber in bridgkeeper hab ich eine Menge davon :-) -- Schönen Gruß - Regards Hartmut Goebel | Hartmut Goebel | IT-Security -- effizient | | h.goebel@goebel-consult.de | www.goebel-consult.de | _______________________________________________ python-de maillist - python-de@python.net http://python.net/mailman/listinfo/python-de
participants (3)
-
Hartmut Goebel -
Olaf 'Rübezahl' Radicke -
Thomas Guettler