Beim duschen ausgeruscht, dabei eine wunderschöne Grätsche in den Abflussstopfen gemacht, der dann gleich zu Bruch gegangen ist so dass ich mir den Fuss seitlich an den Bruchstellen ganz toll aufschneiden konnte…
Bin ich jetzt offiziell alt genug für eine Anti-Rutschmatte in der Wanne?
Schnell mal drüber geschaut, aber, wenn die standardlib nicht mehr enthält, kannst du alles PERL auch mit Java machen. Wahrscheinlich ist Java aber ned so sicher wie PERL.
Wow. Danke für den Tipp, Cyborg. Das hätte ich nicht gedacht. Wenn mir jetzt Perl keinen Mehrwert bringt, dann sage ich dem Kunden einfach „Ich kann eure Skripte nicht lesen, aber ich schreibe sie euch in Java um, das kann man damit auch machen“.
danke dir, das ist nett gemeint. Es sind weniger Verständnisprobleme, es ist eher das Problem dass es zig verschiedene Möglichkeiten gibt, zum Ziel zu kommen. Perl scripte schreiben ist easy, aber beim lesen von Fremdscripten muss man einfach darauf hoffen, dass der andere ähnliche Paradigment gut findet wie man selbst, ansonsten kommt man andauernd ins Nachschlagen (wenn man jetzt nicht wirklich wirklich tief in Perl drinnen ist.)
Z.B. ein Kopfschüttelbeispiel:
my @stringArray = ('hipp', 'hipp', 'array');
my $var = @stringArray; #in $var steht jetzt die länge des Array: 3.
Das sind Notationen, die zwar einfach und kurz sind, die sich aber dem ungeübten Leser nicht direkt erschließen. Von $_ fangen wir jetzt mal gar nicht erst an
Ja, dein Beispiel ist schön zur Veranschaulichung was man in Perl machen kann, wenn man bei der Arbeit mit Arrays einen skalaren Kontext erzwingt
Aber sauber ist das nicht. Normalerweise würde man my $var = scalar @stringArray; schreiben sollen. Ich meine sogar, dass die Zeile ohne Kommando scalar() in älteren Perl’s zu einem warning führt.
Siehst du, ich habe mehrere Perl Tutorials durchgesehen, aber diese einfache Darstellung war nirgends vertreten. Auf den skalaren Kontext ging einer ein, aber das “scalar” gab es hier auch nicht. Da gibt es wohl auch Religionskriege zwischen “Sauberer Code” und “Kompakter Code”…
while (<STDIN>) { # Zeilenweise einlesen von der Standardeingabe STDIN.
# Die gelesene Zeile wird automatisch in $_ gespeichert.
s/BöserText/GuterText/; # Ein Suchen-Ersetzen-RegEx : Ersetzt 'BöserText' durch 'GuterText' in der Variablen $_;
s/PHP/Perl/; # Ein weiterer Suchen-Ersetzen-Regex. Merke : Perl nimmt $_ wenn keine andere Variable gesetzt ist
print; # Ausgabe von $_, welches nun nur noch "GutenText" und kein "PHP" mehr enthalten sollte.
} # Hole die nächste Zeile
Soweit ich das verstehe, werden Operationen die “ohne Bezug” darstehen automatisch auf $_ angewandt. Da $_ eine globale Variable ist, manipuliert auch jede dieser Operationen mein ursprüngliches Array (wenn ich im Schleifendurchlauf eins hätte). Ich würde (persönlich!) die zweite Schreibweise bevorzugen:
while ( my $line = <STDIN> ) {
$line =~ s/BöserText/GuterText/;
$line =~ s/PHP/Perl/; # :-|
print $line;
}
Natürlich sieht der Code weniger cool aus und ist weniger Kompakt, aber hier weiß doch auch direkt jeder was Sache ist, oder?
Könnte ein Mod das vielleicht in die Script-Ecke abspalten? Dann könnte man das noch ein wenig ausbreiten.
Also in dem Perl Buch (Programmieren mit Perl von Larry Well) wird darauf sehr umfangreich eingegangen und ich erinnere mich nicht, dass dort stand, dass das unsauber sei. Dass es ein anderer Kontext ist, sieht man ja auch auf den ersten Blick am Präfix.
*** Edit ***
Wobei ich zugeben muss, dass vieles für einen Perl-Anfänger (zähle mich da auch zu) nicht offensichtlich ist. Deshalb habe ich mir irgendwann auch das besagte Buch zugelegt, welches ich nur wärmstens empfehlen kann.
Wenn man aber erstmal den Dreh raus hat, dann kann man mit Perl sehr schnell kleine und nützliche Scripte schreiben. Die Kernkompetenz ist dabei natürlich die Textverarbeitung.
Das kommt auf die Sichtweise an. Technisch ist es in Ordnung. Aber zum Lesen des Codes ist es eher unschön. Aber das gilt für alle Sprachen. Alles was sehr spezifisch ist ist unschön zu lesen für Syntaxfremde.
Das ist richtig. Explizit ist immer gut. Allerdings sehe ich Perl da ein wenig als Spezialfall, weil es ja genau aus diesem Grunde so entwickelt wurde: um möglichst kurze, mächtige Textbearbeitungsprogramme schreiben zu können. In diesem Sinne entstand es wohl beinahe schon als domänenspezifische Sprache.
Wer es lieber explizit mag, hat die Möglichkeit. Wer echter Perl-Feteschist ist, der schreibt es dann halt kurz.
Ich glaube, dass man sich, wenn man viel in Perl programmiert, sehr schnell daran gewöhnt. Es ist eben nur eine andere - eine kürzere - Syntax.
Jenkins, zum Beispiel. Continuous Integration. Und das Problem bzw. den Frust kann ich nachvollziehen. Besonders wenn CI nur „mal so eben nebenbei“ gemacht werden soll und es dann trotzdem fast in nen Vollzeit Job ausartet.
Maaaaaann! Der Kubuntu-Partitionierer findet bei der Installation immer noch nicht alle am System angeschlossenen Festplatten. Echt, das ist absoluter Müll...
Bei Ubuntu oder Linux Mint geht das doch auch! Kapier ich nicht. Und das zieht sich nun schon durch mehrere Versionen.
Hatte ich auch schon. Kam von einem alten Grossrechner Admin damals der Code … wir sollten den mal eben erweitern. Hat darin geendet, dass wir das alles komplett neu geschrieben haben.
Hinterher sagte er uns dann, dass er sich da jetzt gar nicht mehr zurecht findet und alles so unübersichtlich sei.
Der hatte damals doch tatsächlich statische Variablen noch als Parameter in Methoden übergeben. Unnötig zu erwähnen, dass diese Methode in derselben Klasse lagen wie auch die Variablen ^^ Hach das war ein Spass … not. Da gabs noch viel mehr solche spassigen Dinge.