Frank Schönmann: Ein paar allgemeine Fragen zu Perl

Beitrag lesen

hi!

1.  Variablendeklaration
    Offensichtlich haelt Perl nichts davon, Variablen zu deklarieren, bevor man sie
    benutzen kann. Ich halte das fuer sehr gefaehrlich (aus Erfahrung), man stelle sich
    nur folgendes Konstrukt vor:

Schreibe in die erste Zeile deines Skripts:
#!/usr/bin/perl -w
Durch -w gibt Perl Warnungen aus. In deinem Fall solltest du darauf hingewiesen werden, dass die Variable nur an dieser Stelle verwendet wird.

2.  Wird Gross-/Kleinschreibung unterschieden?
    Zwar wird in <../..//tgca.htm#a5> erwaehnt, wie ein Bezeichner auszusehen
    hat, und dass sowohl Gross- als auch Kleinbuchstaben ERLAUBT sind, jedoch nicht ob
    diese UNTERSCHIEDEN werden. Als ist jetzt  variable  dasselbe wie   VARIABLE
    oder nicht?

Das lässt sich wohl relativ leicht feststellen, indem du ein Skript mit drei Zeilen schreibst ;-)) Die Antwort dürfte JA sein; Perl unterscheidet zwischen Groß- und Kleinschreibung.

3.  Macht continue einen Sinn?
    Stimmt doch, oder? Also nun meine Frage: Gibt es fuer das Perl-continue ein
    sinnvolles Beispiel, oder wollte der Erfinder von Perl seine Sprache einfach etwas
    von C abheben, oder handelt es sich hier schlicht und einfach um einen Fehler in
    SELFHTML? (Habe die Beispiele nicht ausprobiert)

Ich kann nur sagen, ich habe weder den Befehl continue noch redo jemals verwendet, deshalb kann ich dir dazu nicht viel sagen.

4.  Operatoren
    In <../../tgcf.htm> werden zwar die Berechnungsoperatoren ++, --, += und
    -= erwaehnt, was ja aequivalent zu C ist. Aber gibt es in Perl nicht auch solche
    wie  *=, /=, &= und |= ?

Das ist einfach: JA. Folgende gibt es auf jeden Fall: ++, --, +=, *=, -=, /=, ||=, &&=, .=

5.  Fehler in <../../tgci.htm#a2>?
    Fuer mich als C-Junkie stellt sich das eher so dar:

So sieht es für mich auch aus. Aber die meisten werden das nicht merken, und es ist ja nur ein Beispiel, wie man eine Subroutine programmiert.

6.  Binaerdateien lesen
    In <../../tgcj.htm#a2> wird das Lesen von Dateien behandelt. Mit der
    Funktion getc lassen sich Dateien zeichenweise einlesen, was bei Binaerdateien wohl
    noetig ist, denn so etwas wie blockweises Einlesen (1000 Bytes in einem Rutsch) gibt
    es in Perl vermutlich nicht. Am Ende der Datei wird das Zeichen 00 zurueckgegeben.
    Nun ist 00 selbst aber ein in Binaerdateien ziemlich haeufig vorkommendes Zeichen.
    Und das heisst, das sich Binaerdateien mit getc praktisch nicht lesen lassen.
    Gibt es da einen anderen Weg?

open DATEI, "<datei.bin" or die "Fehler!";
binmode DATEI;
...
close DATEI;

binmode schaltet auf Binärmodus um. Theoretisch müsste es dann wohl richtig funktionieren.
Um eine bestimmte Anzahl von Zeichen zu lesen, kannst du die Funktion read verwenden:
  read DATEIHANDLE, SKALAR, LÄNGE [, OFFSET]

7.  Der MIME-Typ
    print "Content-type: text/html\n\n";
    Diese Zeile sieht man im Zusammenhang mit CGI des oefteren. Wirklich erklaert ist
    sie in SELFHTML jedoch nicht. Ich vermute, dies ist eine Konvention der CGI-
    Schnittstelle, welche dann im HTTP-Header den entsprechenden MIME-Typ notiert,
    jedoch ohne das "Content-type: " und die beiden Zeilenvorschuebe.

Ich weiß nicht, wie das HTTP funktioniert. Es handelt sich auf jeden Fall um einen HTTP-Header.

Jetzt ueberlege ich mir, eine ZIP-Datei zum Download zur Verfuegung zu stellen,
    jedoch nicht bevor der Leser sich identifiziert hat (mit Namen und EMail-Adresse).
    Klar, er kann luegen, ist jetzt aber erstmal egal. Wichtig ist: Kann ich jetzt mit
    print "Content-type: application/x-zip-compressed\n\n";
    eine .ZIP-Datei ankuendigen und dann mit print "\x50\x4B\x03\x04" die Daten einfach
    binaer rueberschieben?

Ich würde sagen: ja, genauso müsste es funktionieren.

bye, Frank!