Milka Kuh: Hmmm

HI
ich habe n Perl-Programm gemacht:

#!/usr/bin/perl

$online = "../opensign.gif";
$offline = "../flammeblau.jpg";

print "Content-type: text/html\n\n";
print '<html>';
print '<head>';
print '<title> FTP-Server </title>';
print '</head>';
print '<body>';

if ( -e $online )
{
print "<img src='$online'>";
}
else
{
print "<img src='$offline'>";
}

print '</body>';
print '</html>';

Jetzt habe ich das Problem, dass er immer die Grafik "flammeblau.jpg" anzeigt, obwohl die Datei "opensign.gif" vorhanden ist. Wisst ihr vieleicht warum das nicht geht ?

THX
  Milka Kuh

  1. Hi,

    Jetzt habe ich das Problem, dass er immer die Grafik "flammeblau.jpg" anzeigt, obwohl die Datei "opensign.gif" vorhanden ist. Wisst ihr vieleicht warum das nicht geht ?

    Gibt dem ganzen ein 'Pragma: No cache\n' mit.

    Ciao,
      Wolfgang

  2. Hi,

    #!/usr/bin/perl

    #!/usr/bin/perl -w
    use strict;

    Hiernach darfst Du erst mal Fehler korrigieren :-) Z.B.:

    $online = "../opensign.gif";

    my $online = '../opensign.gif';

    if ( -e $online )

    Im CGI-Kontext ist der Begriff "aktuelles Verzeichnis" undefiniert. Wenn Du eine Datei relativ mit ".." suchst, brauchst Du einen solchen Begriff aber. Lies

    perldoc FindBin

    {

    Waaah. perldoc perlstyle, bitte.

    Übrigens: Hast Du mal getestet, auf "if (-e $offline)" zu prüfen?

    Cheatah

    1. Hi,

      HI

      $online = "../opensign.gif";
      my $online = '../opensign.gif';

      Muss das wirklich so ?

      if ( -e $online )

      Im CGI-Kontext ist der Begriff "aktuelles Verzeichnis" undefiniert. Wenn Du eine Datei relativ mit ".." suchst, brauchst Du einen solchen Begriff aber. Lies

      perldoc FindBin

      HÄ ? Den Satz hab ich nicht verstanden ...

      {
      Waaah. perldoc perlstyle, bitte.

      Wie meinst du das ?

      Übrigens: Hast Du mal getestet, auf "if (-e $offline)" zu prüfen?

      ja, ging auch nicht :-(

      Cheatah

      Milka Kuh

      1. hi,

        perldoc FindBin

        C:>perldoc FindBin
        NAME
            FindBin - Locate directory of original perl script

        SYNOPSIS
             use FindBin;
             use lib "$FindBin::Bin/../lib";

        or

        use FindBin qw($Bin);
             use lib "$Bin/../lib";

        DESCRIPTION
            Locates the full path to the script bin directory to allow the use of
            paths relative to the bin directory.

        usw.

        Waaah. perldoc perlstyle, bitte.
        Wie meinst du das ?

        gleiche Methode. Tipps einfach mal ein und lies nach

        ;-)

        Christoph S.

      2. Hi,

        my $online = '../opensign.gif';
        Muss das wirklich so ?

        wenn Du perl mit "-w" sowie "use strict;" einsetzt, wirst Du andernfalls den Fehler genannt bekommen. Daher solltest Du eben dies auch bei _jedem_ Perlscript tun.

        perldoc FindBin
        HÄ ? Den Satz hab ich nicht verstanden ...

        Hm, soll das heißen, Du weißt noch nicht mal, dass Dir eine vollständige Perl-Dokumentation auf Deiner Festplatte zur Verfügung steht? Siehe Christophs Antwort, und lies insbesondere auch

        perldoc perl
        perldoc perlfaq
        perldoc perlstyle
        perldoc CGI

        Übrigens: Hast Du mal getestet, auf "if (-e $offline)" zu prüfen?
        ja, ging auch nicht :-(

        Das bedeutet, keine der beiden Dateien wird mit Deiner Prüfung gefunden. Diese ist also falsch. Überprüfe übrigens auch die Verzeichnisstruktur auf dem Rechner; manchmal ist das cgi-bin nicht physikalisch unterhalb des htdocs-Verzeichnisses.

        Cheatah

        1. hallo Cheatah,

          wenn Du perl mit "-w" sowie "use strict;" einsetzt, wirst Du andernfalls den Fehler genannt bekommen. Daher solltest Du eben dies auch bei _jedem_ Perlscript tun.

          Ich nehme beides gerne wieder raus, sobald ein Script nach mehreren Tests "fertig" ist und keine Fehler produziert. Meinung dazu ?

          Hm, soll das heißen, Du weißt noch nicht mal, dass Dir eine vollständige Perl-Dokumentation auf Deiner Festplatte zur Verfügung steht? Siehe Christophs Antwort

          vielleicht hat ihn irritiert, daß ich das auf ner Windows-Kiste gemacht hab ;-)

          Grüße aus Berlin

          Christoph S.

          1. Hi Christoph,

            wenn Du perl mit "-w" sowie "use strict;" einsetzt, wirst Du
            andernfalls den Fehler genannt bekommen. Daher solltest Du eben
            dies auch bei _jedem_ Perlscript tun.
            Ich nehme beides gerne wieder raus, sobald ein Script nach mehreren
            Tests "fertig" ist und keine Fehler produziert. Meinung dazu ?

            Die würde mich auch interessieren - zumal ich glaube, bei Performance-
            Tests tatsächlich einen Unterschied gemessen zu haben.
            (Übrigens auch, nachdem ich ein Perl-Skript über mein Perl-Skript habe
            laufen lassen, das alle Kommentare, Einrückungen etc. entfernt hat, alle
            Variablennamen stark abgekürzt und den Quelltext damit von 25 auf 3.5 KB
            reduziert hat ...)

            Viele Grüße
                  Michael

          2. Hallo,

            wenn Du perl mit "-w" sowie "use strict;" einsetzt, wirst Du andernfalls den Fehler genannt bekommen. Daher solltest Du eben dies auch bei _jedem_ Perlscript tun.
            Ich nehme beides gerne wieder raus, sobald ein Script nach mehreren Tests "fertig" ist und keine Fehler produziert. Meinung dazu ?

            Ich habe gelesen, daß mit use strict das Script wesentlich effizienter ist, weil die Variablen nicht dem Paket ::main zugeordnet werden (oder irgendwie so ähnlich :) )und ausserdem kann ich mit my mehrere gleichnamige Variblen für verschiedene Sachen verwenden, wo ich aber ohne my immer eine neue Variable anfangen müsste (oder kann man das doch noch besser machen ? )

            1. use Mosche;

              Ich habe gelesen, daß mit use strict das Script wesentlich effizienter ist, weil die Variablen nicht dem Paket ::main zugeordnet werden (oder irgendwie so ähnlich :) )und ausserdem kann ich mit my mehrere gleichnamige Variblen für verschiedene Sachen verwenden, wo ich aber ohne my immer eine neue Variable anfangen müsste (oder kann man das doch noch besser machen ? )

              Was du sagtst trifft nur auf die explizite Deklaration von Variablen zu (also mit 'my'). Das Pragma strict hat dabei nichts zu tun -  es zwingt dich nur, my zu benutzen (und noch ein bßchen mehr).

              use Tschoe qw(Matti);

          3. Hi,

            Ich nehme beides gerne wieder raus, sobald ein Script nach mehreren Tests "fertig" ist und keine Fehler produziert. Meinung dazu ?

            wenn ein Script mit diesen beiden Angaben erfolgreich durchläuft heißt das noch lange nicht, dass es ohne sie ebenfalls fehlerfrei bleibt. Je nach Schnittstellen zur Außenwelt kommt es früher oder später leicht vor, dass z.B. Variablen uninitialisiert bleiben, mit nicht vorherzusehenden Folgen. Wenn man aber saubere Unittests[1] durchführt, kann man außerhalb der Entwicklungsumgebung gerne darauf verzichten.

            vielleicht hat ihn

            Sie :-)

            Cheatah

            [1] Wer nicht weiß, was dieser Begriff genau bedeutet, führt mit an Sicherheit grenzender Wahrscheinlichkeit _keine_ sauberen Unittests durch :-)