Springe zum Hauptinhalt

Warum Sie nicht Perl programmiern sollten

Ein Freund hat­te an­ge­kün­dig­t, es wol­le jetzt "rich­tig" Perl ler­nen. Ich rat ihm drin­gend da­von ab. Hier, was ich ihm ge­schrie­ben ha­be:

Lie­ber Freund

es lässt mir kei­ne Ru­he, dass Du Dei­ne Le­bens­zeit mit so schlech­ten Din­gen wie Perl ver­tun möch­tes­t.

Ich hab schon mit ei­ni­gen Pro­gram­mier­spra­chen ge­ar­bei­tet und mir vie­le an­ge­se­hen. Perl ist ei­ne der schlech­tes­ten! Perl ver­sagt bei der wich­ti­gen Auf­ga­be, dem Pro­gram­mie­rer zu un­ter­stüt­zen. Im Ge­gen­teil: Perl steckt voll Fall­stri­cke und Un­durch­dach­tem.

Ein paar Bei­spie­le:

Der Rü­ck­ga­be­wert vie­ler Stan­dard­-­Funk­ti­o­nen hängt vom Auf­ruf­kon­text ab. Mal ein Sca­la­r, mal ein Hash, mal ein Ob­jek­t.

Durch au­to­ma­ti­sche Ty­p­um­wand­lung fällt man im­mer wie­der auf die Schnau­ze. Statt der Lis­te oder dem Hash hast du plötz­lich die An­zahl der Ele­men­te dar­in - oder war es der höchs­te In­dex? Da­mit musst du aber auch denn wis­sen, was ei­ne Funk­ti­on lie­fer­t, wenn dich der Wert über­haupt nicht in­ter­es­siert und du ihn nur an ei­ne an­de­re Funk­ti­on wei­ter­rei­chen willst.

Über­ge­ben von Pa­ra­me­tern an Funk­ti­o­nen t ei­ne Krank­heit, al­les muss der Pro­gram­mie­rer selbst schrei­ben:

  • Die Pa­ra­­me­ter ei­­ner Funk­ti­on wer­­den als dum­­me Lis­te über­­­ge­­ben, man muss sie selbst den ein­­zel­­nen Va­ri­a­blen zu­wei­­sen. Wel­che Pa­ra­­me­ter die Funk­ti­on an­­nim­m­t, *kann* man in ei­­nem Pro­to­­ty­­­pe fest­le­­gen, aber trotz­­dem muss man die Lis­te der Ar­­gu­­men­te wei­ter­hin hän­­disch aus­­wer­ten.

  • "Na­­med pa­ra­­me­ter" muss man kom­plett hän­­disch im­ple­­men­tie­ren, sie­he das Bei­­spiel in ht­t­p://­­doc­­sto­­re.­­mi­k.ua/o­rel­­ly/­­per­l/­­coo­k­­boo­k/ch10_08.htm. Wenn der Nut­­zer der Funk­ti­on dann zu vie­le oder un­­­be­­kann­te Pa­ra­­me­ter über­­­gib­t, gibt es kei­­ne Feh­­ler­­mel­­dung -- au­­ßer der Pro­­gram­­mie­­rer hat das ex­tra pro­­gram­­mier­t. Dop­­pel­te Pa­ra­­me­ter wer­­den da­­bei gar nicht er­­kannt.

Din­ge die ei­gent­lich der Nor­ma­l­fall sin­d, muss man aus­drü­ck­lich hin­schrei­ben und der Nor­mall­fall ist das, was man nur sel­ten will:

  • Din­­ge, die man ei­­gent­­lich im­­mer braucht, um sau­­ber zu pro­­gram­­mie­ren muss man ex­tra ein­­scha­l­ten: use stric­t, user wa­r­­nings.

  • Un­­aus­­ge­reif­tes Sco­­pe­­-­­­Kon­­zep­t: Der Nor­­ma­l­fall ist ei­­gent­­lich, dass man lo­­ka­le Va­ri­a­blen nut­­zen möch­te. Auch hier muss man den Stan­dard Fall wie­­der mit „my“ an­­ge­­ben.

Ei­ne Klas­se zu de­fi­nie­ren ist ein re­li­gi­öser Akt ("bless") und ins­ge­samt um­ständ­lich. Es scheint zwar ein Mo­dul zu ge­ben, dass das bes­ser macht, aber da sind wir wie­der bei: "ein­fa­ches ist um­ständ­lich".

  • Zi­tat vom "per­l­­mas­ter" aus dem ak­tu­el­len Li­­nux­­-­­­Ma­­ga­­zin (8/2016, S. 92): "… nie­­man­d, der ei­­ni­­ger­­ma­­ßen bei Ver­­­stand ist, hät­te auch nur in ei­­nem mit­­tel­­gro­­ßen Pro­­gramm die zu Klas­­sen ge­s­tem­­pel­ten Hash­struk­tu­en […] ver­­wen­­det."

Das Mo­dul­kon­zept ist der Spra­che auf­ge­pfropft.

Die ge­sam­te Syn­tax ist un­über­sicht­lich, es gibt kei­ne EB­NF o.ä. der Gram­ma­ti­k, "on­ly perl can par­se Per­l". Für al­les Mög­li­che gibt es ei­ge­ne Syn­ta­x­-­Kon­struk­te, die aber kei­ne wirk­li­chen Vor­tei­le brin­gen. Man merk­t, dass Lar­ry Wall Sprach­wis­sen­schaft­ler ist und kei­ne Ah­nung von Pro­gram­mier­spra­chen hat. Das Gan­ze ist zu­sam­men­ge­stöp­selt aus al­ten Un­ix­-­Tool­s, und so schaut es auch aus.

Kein Ex­cep­ti­o­n­-­Hand­ling, da­durch muss man eva­l() be­nut­zen, wenn man Feh­ler ab­fan­gen will. Wenn Du ein­mal er­kannt hast, wie ele­gant man Pro­gram­mie­ren kann, wenn es Ex­cep­ti­o­n­-­Hand­ling gib­t, möch­test Du es nicht mehr miss­en. Der Clou ist näm­lich, dass man nicht bei je­der Funk­ti­on ei­ne Feh­ler­mel­dung zu­rück­ge­ben muss und nicht bei je­dem Funk­ti­ons­auf­ruf auf Feh­ler prü­fen muss.

Nach­ge­stell­te Kon­troll­struk­tu­ren – las­sen sich su­per ein­fach le­sen.

Stän­dig muss man kryp­ti­sche Zei­chen vor den Va­ri­a­blen­na­men schrei­ben, teil­wei­se meh­re­re. Was ich mich da­mit ab­ge­kämpft ha­be.

Ich ha­be auch ein hal­b­es Jahr mit Perl pro­gram­mier­t. Das war die un­pro­duk­tivs­te Zeit mei­nes Le­bens. Zum Glück ha­be ich dann Py­thon ent­deck­t, sie­he auch die ca. 20 Zei­len des "Zen of Py­thon" [1],[2]. Ich spa­re es mir, auf­zu­zei­gen, dass al­le oben ge­nann­ten Punk­te in Py­thon bes­ser ge­löst sin­d, aber zu Pa­ra­me­tern emp­feh­le ich einen Blick auf htt­p://ww­w.­divein­to­py­thon.­net/­po­w­er_of_in­tro­spec­ti­o­n/­op­ti­o­na­l_ar­gu­ment­s.html

Lieben Gruß
Hartmut
Portrait von Hartmut Goebel

Hartmut Goebel

Diplom-Informatiker, CISSP, CSSLP, ISO 27001 Lead Implementer

Haben Sie noch Fragen?
Anruf oder Mail genügt:
  +49 871 6606-318
  +49 175 29 78 072
  h.goebel@goebel-consult.de