Wowbagger: ENV-variablen

Hallo Perl-cracks,

da ich anfänger bin, kann ich mir folgendes phänomen nicht erklären (ist vielleicht auch ganz billig, aber wie gesagt ich steh' halt noch am anfang ;)):

man kann ja sämtliche umgebungsvariablen über den %ENV hash ansprechen, also kann man auch alle auf einen schlag (wenn auch völlig unformatiert) mit print %ENV; ausgeben. Soweit so gut, das klappt lokal so wie's soll, nur bei meinem ISP wird auf diese weise nur eine einzige ausgegeben (PERLXSPerlIS). Aber sobald ich ganz explizit eine bestimmte variable ausgeben möchte, funktioniert's auf einmal auch beim ISP (z.b. print $ENV{'SERVER_SOFTWARE'};
Der ISP fährt Windoze NT mit dem IIS.

Wer da draußen kann mir erklären, wieso? Das ist doch ziemlich seltsam, nicht?

so long...
/*,*/
Wowbagger

  1. Hi,

    man kann ja sämtliche umgebungsvariablen über den %ENV hash ansprechen, also kann man auch alle auf einen schlag (wenn auch völlig unformatiert) mit print %ENV; ausgeben. Soweit so gut, das klappt lokal so wie's soll, nur bei meinem ISP wird auf diese weise nur eine einzige ausgegeben (PERLXSPerlIS). Aber sobald ich ganz explizit eine bestimmte variable ausgeben möchte, funktioniert's auf einmal auch beim ISP (z.b. print $ENV{'SERVER_SOFTWARE'};
    Der ISP fährt Windoze NT mit dem IIS.

    offenbar funktioniert die Ausgabe eines Hashs bei dem Perl, daß Dein ISP benutzt anders, als bei "üblichen" Perl-Versionen - vielleicht liegt's auch an der Perl-Version (teste es mit perl -V oder auch mit print $] in einem Script). Was hingegen funktionieren muß, ist folgendes:

    foreach (keys %ENV) { print "$_: $ENV{$_}\n"; }

    Hierbei kannst Du die Ausgabe auch noch etwas komfortabler gestalten, z.B. in einer Tabelle :-)

    Cheatah

    1. Hi Cheatah,

      offenbar funktioniert die Ausgabe eines Hashs bei dem Perl, daß Dein ISP benutzt anders, als bei "üblichen" Perl-Versionen - vielleicht liegt's auch an

      Wir fahren beide im grunde die gleiche version (ActivePerl 5), nur ist meine version etwas aktueller (print $] ergibt bei mir 5.00503 und beim ISP 5.00307).

      Was hingegen funktionieren muß, ist folgendes:

      foreach (keys %ENV) { print "$_: $ENV{$_}\n"; }

      ich habe es 'mal in folgendes script gepackt und das ergebnis ist ständig das gleiche: nur eine ausgabe: PERLXS: PerlIS

      Der source:

      #!perl

      $i= 0;

      print "Content-type: text/html\n\n";
      print "<html>\n<head><title></title></head>\n<body>\nENV-VARS:<br><br>";

      #for (%ENV) {

      $i++;

      print $_;

      if ($i % 2) { print ": "; }

      #  else { print"<br>"; }
      #}

      foreach (keys %ENV) { print "$_: $ENV{$_}<br>"; }

      print "</body>\n</html>\n";

      ist doch höchst seltsam, oder?

      /*,*/
      Wowbagger

      1. Hi Wowbagger,

        probiere es doch mal mit folgendem Script.

        #!/usr/bin/perl
        print "Content-type: text/html\n\n";
        print "<html><head><title>PathFinder</title></head><body><center><table border="0" width="400">\n";
        $date = localtime(time);
        print "<tr><td width="200" bgcolor="#0066cb"><font color="#FFCC00"><center><b>Local Time</b></center></font></td><td width="200" bgcolor="#003366"><font color="#FFFFFF"><center>$date</center></td></tr></font>\n";
        while (($key, $val) = each %ENV) {
        print "<tr><td width="200" bgcolor="#0066cb"><font color="#FFCC00"><center><b>$key</b></center></font></td><td width="200" bgcolor="#003366"><font color="#FFFFFF"><center>$val</center></td></tr></font>\n";
        }
        print "</table></center></body></html>\n"

        Bei meinem ISP funzt es, und er nuzt version 5.005_03 built for i586-linux

        <www.pofo.de/cgi-bin/pathfinder.pl>

        MfG Olli *g*

        1. Hi Olli,

          probiere es doch mal mit folgendem Script.

          ...

          Bei meinem ISP funzt es, und er nuzt version 5.005_03 built for i586-linux

          leider der gleiche effekt :(
          Mein ISP und ich nutzen Perl unter NT, dein script funktioniert aber bei mir lokal einwandfrei, nur beim ISP immer wieder nur die ausgabe:

          PERLXS PerlIS (erscheint lokal übrigens _nicht_, dafür dann aber alles andere, was man so erwarten würde ;))

          Am liebsten würde ich beim ISP per PCAnywhere oder noch besser direkt vor ort nachschauen, wie er das alles eingerichtet hat...das ist ja zum verrücktwerden, man kommt sich langsam aber sicher so vor wie ein blinder der versucht eine fliege mit der hand einzufangen.....

          tschau sagt
          /*,*/
          Wowbagger, genervt...

          1. Hi,

            leider der gleiche effekt :(
            Mein ISP und ich nutzen Perl unter NT, dein script funktioniert aber bei mir lokal einwandfrei, nur beim ISP immer wieder nur die ausgabe:

            ich komme zu dem Schluß, daß Dein Provider bei der Konfiguration irgendwie geschlampt hat. Am besten fragst Du ihn noch mal...

            Cheatah

  2. also kann man auch alle auf einen schlag (wenn auch völlig unformatiert) mit print %ENV; ausgeben. Soweit so gut, das klappt lokal so wie's soll, nur bei meinem ISP wird auf diese weise nur eine einzige ausgegeben (PERLXSPerlIS).

    Vielleicht sieht es nur so aus. "Unformatiert" mit Steuerzeichen kann ganz schön viel Chaos anrichten - vielleicht sieht man dann den Rest der Ausgabe nicht mehr, weil z. B. jede Zeile die vorherige überschreibt usw.?

    Aber sobald ich ganz explizit eine bestimmte variable ausgeben möchte, funktioniert's auf einmal auch beim ISP (z.b. print $ENV{'SERVER_SOFTWARE'};

    Was darauf schließen läßt, daß die Variablen sehr wohl gesetzt sind.
    Also doch lieber die triviale Schleife nehmen: http://www.teamone.de/selfaktuell/schroepl03.htm#a18.