[Python-de] Warum nicht Perl

Thomas Guettler guettli at thomas-guettler.de
Son Jun 13 21:02:41 CEST 2004


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 at thomas-guettler.de>
http://www.thomas-guettler.de