Edi: Datem-extention

0 62

Datem-extention

Edi
  • perl
  1. 0
    Struppi
    1. 0
      Edi
      1. 0
        Struppi
        1. 0
          Edi
      2. 0
        Patrick Andrieu
      3. 0
        edi
        1. 0
          Struppi
          1. 0
            Edi
            1. 0
              Struppi
              1. 0
                Edi
                1. 0
                  Struppi
                2. 0
                  Patrick Andrieu
                  1. 0
                    Edi
                    1. 0
                      Struppi
                    2. 0
                      Patrick Andrieu
                      1. 0

                        Fehlerteufel

                        Patrick Andrieu
                      2. 0
                        Siechfred
                        1. 0
                          Patrick Andrieu
                          1. 0
                            Siechfred
                            1. 0
                              Patrick Andrieu
                              1. 0
                                Siechfred
                                1. 0
                                  Edi
                                  1. 0
                                    Patrick Andrieu
                                    1. 0
                                      Edi
                                      1. 0
                                        Patrick Andrieu
                                        1. 0
                                          Edi
                                          1. 0
                                            Struppi
                                            1. 0
                                              Edi
                                              1. 0
                                                Struppi
                                                1. 0
                                                  Edi
                                                  1. 0
                                                    Struppi
                                                    1. 0
                                                      Edi
                                                      1. 0
                                                        Struppi
                                                        1. 0
                                                          Patrick Andrieu
                                                          1. 0
                                                            Struppi
                                                            1. 0
                                                              Patrick Andrieu
                                                              1. 0
                                                                Struppi
                                                                1. 0
                                                                  Patrick Andrieu
                                                                  1. 0
                                                                    Struppi
                                                                    1. 0
                                                                      Patrick Andrieu
                                                                      1. 0
                                                                        Edi
                                                                        1. 0
                                                                          Struppi
                                                                          1. 0
                                                                            Struppi
                                                                            1. 0
                                                                              Edi
                                                                              1. 0
                                                                                Siechfred
                                                                                1. 0
                                                                                  Edi
                                                                                  1. 0
                                                                                    Struppi
                                                                                  2. 0
                                                                                    Siechfred
                                                                                    1. 0
                                                                                      Edi
                                                                                      1. 0
                                                                                        Siechfred
                                                                2. 0
                                                                  Edi
                                          2. 0
                                            Siechfred
                                            1. 0
                                              Edi
                                          3. 0
                                            Patrick Andrieu
                              2. 0
                                Patrick Andrieu
                                1. 0

                                  Listenkontext vs. skalarer Kontext

                                  Siechfred
                                  1. 0
                                    Patrick Andrieu
                                    1. 0
                                      at
                                      1. 0
                                        Struppi
                                        1. 0
                                          at
        2. 0
          Patrick Andrieu

Hallo,

ich hab ein Problem...vielleicht könnte mir jemand helfen...
ich muss bei einem Projekt ein Tool entwickeln, die die log-Files anzeigt bzw. mit einem klick die vom aktuellen Tag zeigt.
die log Files werden automatisch in dem Format generiert:
t.log.20070111

wie kann ich die aktuelle Datum in dem Format erfassen ?!

danke,
lg,
edi

  1. die log Files werden automatisch in dem Format generiert:
    t.log.20070111

    wie kann ich die aktuelle Datum in dem Format erfassen ?!

    http://perldoc.perl.org/functions/localtime.html
    und dann mit sprintf zusammenbauen.

    Struppi.

    1. Danke für dein Tipp.
      ich hab das Problem gelöst.
      jetzt habe ich aber noch ein Problem.

      Es wird immer die Aktuelle log-Datei angezeigt. Aber da sie ja ständig geändert wird, gibt es eine Möglichkeit dass sie immer aktualisiert / refresh wird ?

      1. Es wird immer die Aktuelle log-Datei angezeigt. Aber da sie ja ständig geändert wird, gibt es eine Möglichkeit dass sie immer aktualisiert / refresh wird ?

        Keine Ahnung, kommt auf dien Skript an.

        Struppi.

        1. also so schaut mein der HTML-Teil aus :

          print "Content-type: text/html\n\n";
          print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
          print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title></head><body>\n";

          foreach(@Zeilen) {
           print "$_<br>\n";
          }

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

          und wo soll ich die Java-Script einfügen ?!
          sorry...ich bin ein Anfänger.

          Danke,
          Edi

      2. Hallo Edi!

        Es wird immer die Aktuelle log-Datei angezeigt. Aber da sie ja ständig geändert wird, gibt es eine Möglichkeit dass sie immer aktualisiert / refresh wird ?

        Ergänzend zu Struppis Antwort: Wie läßt Du die Datei ausgeben? Als Textdatei im Browser? Als HTML-Datei im Browser, wenn ja, roh oder "aufbereitet"? In HTML kannst Du Mechanismen einbauen, die die Datei zeitversetzt neu laden (meta refresh, JavaScript-Funktion). Zwischen 3 und 5 mn Zeit braucht es bei meinem Provider, bis neue Zeilen in der hier access.log.current genannte Tageslogfile zu sehen sind. So würde ich ein Intervall auf 3 mn setzen (allerdings refreshe ich per Hand, da ich nicht ständig vor den Logs hocke *g*).

        Viele Grüße aus Frankfurt/Main,
        Patrick

        --

        _ - jenseits vom delirium - _
        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
        Nichts ist unmöglich? Doch!
        Heute schon gegökt?
      3. also so schaut mein der HTML-Teil aus :

        print "Content-type: text/html\n\n";
        print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
        print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title></head><body>\n";

        foreach(@Zeilen) {
         print "$_<br>\n";
        }

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

        und wo soll ich die Java-Script einfügen ?!
        sorry...ich bin ein Anfänger.

        Danke,
        Edi

        1. Du könntest mit refresh die seite immer wieder neuladen.

          Struppi.

          1. wo soll ich aber die funktion einfügen ?
            ich hab es wie folgt gemacht, es funktionert aber nicht und ich bekomme immer folgende Fehler:

            Execution of /apache/cgi-bin/openfile.pl aborted due to compilation errors.

            print "Content-type: text/html\n\n";
            print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
            print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>\n<meta http-equiv="refresh" content="5;>
            \n</head><body>\n";

            foreach(@Zeilen) {
             print "$_<br>\n";
            }

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

            Edi

            1. wo soll ich aber die funktion einfügen ?
              ich hab es wie folgt gemacht, es funktionert aber nicht und ich bekomme immer folgende Fehler:

              Execution of /apache/cgi-bin/openfile.pl aborted due to compilation errors.

              Das ist keine Fehlermeldung, sondern nur die Meldung das ein Fehler aufgetreten ist.
              Errorlog? Oder falls du keinen Zugriff hast use CGI:Carp qw/fatalsToBrowser/
              Oder im Zweifelsfall in der Konsole/DOS Fenster ausführen.

              print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>\n<meta http-equiv="refresh" content="5;>
              \n</head><body>\n";

              Wobei du eigentlich leicht den Fehler sehen solltest.

              Struppi.

              1. ehrlich gesagt Struppi ich sehe den Fehler nicht, außer dass du content="5; meinst, wo " fehlt. wobei ich das schon korrigiert habe, aber das funktioniert trotzdem nicht:

                print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>\n<meta http-equiv="refresh" content="5";>\n</head><body>\n";

                und Patrick...danke für deine Beschreibung...wie kann ich es noch verbessern ? ich hab mir auch gedacht dass ich es irgendwie formatiere aber da ich mich gar nicht auskenne weiß ich auch nicht welche Möglichkeiten man hat. also jetzt wird jede Zeile so ausgegeben:
                (dvname, sut, release, testcase, startdate, starttime)
                saler;msc3;18;prepaid001_b_v_lup_in_hplmn_qscfwihp_is_yes;2007-01-11;10:52:36

                wie kann ich es lesbarer machen ?!

                Danke für eure Hilfe,

                Edi

                1. ehrlich gesagt Struppi ich sehe den Fehler nicht,

                  gut, ich hab dir aber auch zwei Möglichkeiten genannt mit dem du ihn findest.

                  Struppi.

                2. Hallo Edi!

                  print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>\n<meta http-equiv="refresh" content="5";>\n</head><body>\n";

                  Alle innere Einführungszeichen gehören maskiert: ". Wenn nicht, werden sie für den String-Delimiter gehalten. So wie oben, hört der String, den Du ausgeben willst, hinter equiv=. Der Rest wird nicht verstanden -> Error.

                  Daher der Tipp in meinem anderen Post. Bis zum Endbegrenzer kannst Du den HTML-Code ganz normal notieren und brauchst Dich um keinerlei Zeichenmaskierung zu kümmern (außer @ bei einer E-Mail-Adresse).

                  (dvname, sut, release, testcase, startdate, starttime)
                  saler;msc3;18;prepaid001_b_v_lup_in_hplmn_qscfwihp_is_yes;2007-01-11;10:52:36

                  Ach, das sind keine Server-Access-Logs? Sorry, ich ging davon aus, dass Du diese meinst.

                  Nun, die Datei ist im csv-Format (Komagetrennt), hier fungieren Semikola als Trennzeichen. Du könntest jede Zeile splitten und daraus eine schöne (und diesmal berechtigte, weil tabellarische Daten *g*) Tabelle machen.

                  Viele Grüße aus Frankfurt/Main,
                  Patrick

                  --

                  _ - jenseits vom delirium - _
                  [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                  Nichts ist unmöglich? Doch!
                  Heute schon gegökt?
                  1. Hi,

                    also mein Problem mit refresh wurde gelöst. es war eben die Maskierung. jetzt bzgl. der splitten.

                    also die Log-Datein werden in @Zeilen kopiert und sie wird dann zeilenweise ausgegeben:

                    open(DATEI,"<$Name") || die "Datei nicht gefunden!!!\n";
                    my @Zeilen = <DATEI>;
                    close(DATEI);

                    foreach(@Zeilen) {
                     print "$_<br>\n";
                    }

                    aber in welcher variable werden die einzelne zeilen gespeichert ? und wie entwerfe ich dann eine tabelle , in der das ganze gespeichert wird ?!

                    Danke noch mal,
                    Edi

                    1. also die Log-Datein werden in @Zeilen kopiert und sie wird dann zeilenweise ausgegeben:

                      open(DATEI,"<$Name") || die "Datei nicht gefunden!!!\n";
                      my @Zeilen = <DATEI>;
                      close(DATEI);

                      foreach(@Zeilen) {
                      print "$_<br>\n";
                      }

                      Das würde ich auf keinen Fall machen!
                      Logdateien sind naturgemäß sehr gross und du liest die Datei komplett und unnötigerwiese in den Arbeitspeicher, was sicher ein performance killer sein kann.

                      open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";
                      while(<DATEI>) {
                        print "$_<br>\n";
                      }
                      close DATEI;

                      Struppi.

                    2. Hallo Edi!

                      aber in welcher variable werden die einzelne zeilen gespeichert ? und wie entwerfe ich dann eine tabelle , in der das ganze gespeichert wird ?!

                      Also, ein bisschen im Perl-Kapitel selber lesen solltest Du schon...

                      Hast Du das Beispiel mit split() gesehen? Im Beispiel gibt es einen Skalar $Satz der aus einem String aus 8 Wörtern besteht, getrennt durch je ein Leerzeichen.

                      Und was gibt Deine Datei her? Jede Zeile besteht aus 6 -ich sage mal- Feldern, getrennt durch je ein Semikolon. Dieses Trennzeichen (das Semikolon) gilt es zu entfernen, die Werte in den Feldern wollen beibehalten werten. Deswegen anstatt das Array mit @Wörter zu definieren, wie im SELFHTML-Beispiel, werden die 6 benötigten Variablen in einem "namenslosen" Array definiert (als Variablen-Name habe ich die Bezeichnung genommen, die Du vorhin genannt hast):

                      (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = split(/;/ , $Zeile);

                      Im regulären Ausdruck im ersten Parameter von split erkennst Du das Semikolon, das nicht mehr gebraucht wird.

                      Aber $Zeile, was ist das? Nun, ich habe meine Erklärung von hinten angefangen. Da Struppis Einwand berechtigt wird und es unnötig ist, große Mengen an Daten in den Speicher zu laden, wird die Datei Zeilenweise mit while eingelesen:

                        
                      open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";  
                      while(<DATEI>) {  
                        my $Zeile = $_;  
                        chomp $_;  
                        (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = split(/;/ , $Zeile);  
                        print "<tr><td>$dvname</td><td>$sut</td><td>$release</td><td>$testcase</td><td>$startdate</td><td>$starttime</td></tr>\n";  
                      }  
                      close DATEI;  
                      
                      

                      So könnte es dann aussehen:

                        
                      print <<"DELIM";  
                      <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">  
                      <html>  
                      <head>  
                      <title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>  
                      <meta http-equiv="refresh" content="300";>  
                      </head>  
                      <body>  
                      <table>  
                      <tr><th>Verkäufer</th><th>Bla</th><th>blubb</th><th>Foo</th><th>Startdatum</th><th>Startzeit</th></tr>  
                      DELIM  
                        
                      open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";  
                      while(<DATEI>) {  
                        my $Zeile = $_;  
                        chomp $_;  
                        (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = split(/;/ , $Zeile);  
                        print "<tr><td>$dvname</td><td>$sut</td><td>$release</td><td>$testcase</td><td>$startdate</td><td>$starttime</td></tr>\n";  
                      }  
                      close DATEI;  
                        
                      print <<"DELIM";  
                      </table>  
                      </body>  
                      </html>  
                      DELIM  
                        
                      
                      

                      ^Auch wenn hier das Ende des Scripts sein sollte, gehört nach dem Endbegrenzer eine Leerzeile.

                      Die Tabelle kannst Du mittels CSS selbst formatieren - Border sollte auf jeden Fall vorhanden sein, erhöht die Lesebarkeit. 5 Sekunden für ein Refresh ist zu kurz, dann hat der Auftraggeber nicht die Zeit, sich die Tabelle anzuschauen, schon wird sie neu geladen. Hinzu kommt, dass wenn diese Logs sehr lang sind, der Browser schon Zeit brauchen wird, die Tabelle überhaupt zu rendern. Den Wert habe ich auf 300 Sekunden (5mn) geändert.

                      Viele Grüße aus Frankfurt/Main,
                      Patrick

                      --

                      _ - jenseits vom delirium - _
                      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                      Nichts ist unmöglich? Doch!
                      Heute schon gegökt?
                      1. Hallo Fehlerteufel!

                        my $Zeile = $_;
                          chomp $_;

                        ^^

                        Lesen:
                        chomp $Zeile;

                        Viele Grüße aus Frankfurt/Main,
                        Patrick

                        --

                        _ - jenseits vom delirium - _
                        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                        Nichts ist unmöglich? Doch!
                        Heute schon gegökt?
                      2. Ich darf doch mal :)

                        open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";
                        while(<DATEI>) {
                          my $Zeile = $;
                          chomp $
                        ;
                          (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = split(/;/ , $Zeile);
                          print "<tr><td>$dvname</td><td>$sut</td><td>$release</td><td>$testcase</td><td>$startdate</td><td>$starttime</td></tr>\n";
                        }
                        close DATEI;

                          
                        Oder die Kurzform:  
                          
                        ~~~perl
                        print '<table>';  
                        open DATEI, $name || die $!;  
                        while(<DATEI>) {  
                          chomp;  
                          print '<tr>';  
                          print "<td>$_</td>" foreach split /;/;  
                          print '</tr>';  
                        }  
                        print '</table>';
                        

                        Oder gleich mit Templates.

                        Siechfred

                        --
                        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
                        1. Hallo Siechfred!

                          Ich darf doch mal :)

                          Aber immer gerne!

                          Oder die Kurzform:

                          print '<table>';

                          open DATEI, $name || die $!;
                          while(<DATEI>) {
                            chomp;
                            print '<tr>';
                            print "<td>$_</td>" foreach split /;/;
                            print '</tr>';
                          }
                          print '</table>';

                            
                          Interessant, wobei die "Langform" m.E. den Vorteil hat, dass die man die Reihenfolge der Tabelleneinträge bestimmen kann:  
                           print "<tr><td>$startdate</td><td>$starttime</td><td>$dvname</td><td>$sut</td><td>$release</td><td>$testcase</td></tr>\n";  
                            
                          Oder gibt es auch hierfür eine "kurze" Möglichkeit? ;)  
                            
                            
                          
                          > Oder gleich mit [Templates](http://anaboe.net/codes/perl/html-seiten-mit-html-template).  
                            
                          Das dürfte den OP wiederum überfordern :) - Werde \_ich\_ aber beizeiten testen!  
                            
                            
                          Viele Grüße aus Frankfurt/Main,  
                          Patrick
                          
                          -- 
                          ![](http://www.atomic-eggs.com/clubsig.gif)  
                            
                          \_ - jenseits vom delirium - \_  
                            
                          [[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash](http://www.atomic-eggs.com/)]  
                          Nichts ist unmöglich? [Doch!](http://www.atomic-eggs.com/cwi/cwi_4.shtml)  
                          Heute schon ge[gök](http://goek.atomic-eggs.com/goek_goek.html)t?
                          
                          1. Nabend Patrick.

                            Interessant, wobei die "Langform" m.E. den Vorteil hat, dass die man die Reihenfolge der Tabelleneinträge bestimmen kann:

                            Da ist was dran, aber:

                            my $str = 'Fischers Fritze fischte frische Fische';  
                            print join ' ', (split / /, $str)[3,4,2,0,1];
                            

                            Soviel aus der Abteilung "What Perl can do for You" ;)

                            Oder gibt es auch hierfür eine "kurze" Möglichkeit? ;)

                            Obiges ließe sich dahingehend sicher ausbauen, indem man mit '</td><td>' joint.

                            Oder gleich mit Templates.
                            Das dürfte den OP wiederum überfordern :)

                            Hm, ich fände es komplizierter, diese Ausgabe mit dem CGI-Modul zu realisieren, aber darin ist Struppi fitter als ich. Und heredoc-Abschnitte in Perlscripten mag ich nicht so sehr.

                            Siechfred

                            --
                            Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
                            1. Hallo Siechfred!

                              my $str = 'Fischers Fritze fischte frische Fische';

                              print join ' ', (split / /, $str)[3,4,2,0,1];

                              
                              >   
                              > Soviel aus der Abteilung "What Perl can do for You" ;)  
                                
                              Fein! print gefolgt von einer Funktion war mir nicht bekannt.  
                                
                              
                              > Hm, ich fände es komplizierter, diese Ausgabe mit dem CGI-Modul zu realisieren, aber darin ist Struppi fitter als ich.  
                                
                              Der sagt uns das sicher bald...  
                                
                              
                              > Und heredoc-Abschnitte in Perlscripten mag ich nicht so sehr.  
                                
                              Ja, ich weiß. Trennung von Markup und Layout, äh, von Programmcode und Fremdcode (hier HTML-Code) ;)  
                                
                              Dennoch finde ich sie zum einen praktisch, zum zweiten schöner als diese ellenlangen Anreihungen von print-Befehlen, wie sie noch in Matt Wrights WWWboard zu finden waren, als ich daraus die (alten) SELF-Visitenkarten machte (ohne jegliche Ahnung von Perl und mich nur herantastend \*g\*) ;)  
                                
                                
                              Viele Grüße aus Frankfurt/Main,  
                              Patrick
                              
                              -- 
                              ![](http://www.atomic-eggs.com/clubsig.gif)  
                                
                              \_ - jenseits vom delirium - \_  
                                
                              [[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash](http://www.atomic-eggs.com/)]  
                              Nichts ist unmöglich? [Doch!](http://www.atomic-eggs.com/cwi/cwi_4.shtml)  
                              Heute schon ge[gök](http://goek.atomic-eggs.com/goek_goek.html)t?
                              
                              1. Und heredoc-Abschnitte in Perlscripten mag ich nicht so sehr.
                                Ja, ich weiß. Trennung von Markup und Layout, äh, von Programmcode und Fremdcode (hier HTML-Code) ;)

                                Ist bei mir eher eine Frage der Les- und Wartbarkeit. In heredoc-Abschnitten schraube ich eher herum (Stichwort Designänderung) als am Code.

                                Dennoch finde ich sie zum einen praktisch, zum zweiten schöner als diese ellenlangen Anreihungen von print-Befehlen, wie sie noch in Matt Wrights WWWboard zu finden waren

                                Da gebe ich dir Recht.

                                als ich daraus die (alten) SELF-Visitenkarten machte (ohne jegliche Ahnung von Perl und mich nur herantastend *g*) ;)

                                Hehe, meine ersten Perlscripte sind auf immer und ewig im Giftschrank verschwunden :)

                                Siechfred

                                --
                                Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
                                1. Hallo Patrick,

                                  danke für deine Hilfe...es tut mir leid dass ich so viel frage aber ich programmiere mit perl seit 5 tagen !!!! ich mache ein praktikum und auf einmal hab ich solche aufgaben bekommen !!!

                                  aber danke und falls ich noch probleme habe, wende ich mich an euch =)

                                  liebe grüße,
                                  Edi

                                  1. Hallo Edi!

                                    Hallo Patrick,
                                    danke für deine Hilfe...

                                    Und Struppi und Siechfred? Verdienen die keinen Dank?

                                    es tut mir leid dass ich so viel frage

                                    Das Forum ist unter Umständen auch dafür da, Fragen zu stellen. ;)

                                    aber ich programmiere mit perl seit 5 tagen !!!!

                                    Dann heißt es lesen, informieren! Ich weiß nicht, inwieweit Du im Englischen fit bist [1], aber wenn Du Perl lokal installiert hast, hast Du die Original-Dokumentation dabei - sogar im HTML-Format. So viel ich weiß sind auch einige Teile der Perl-Doku übersetzt (vielleicht spendiert jemand den Link dazu).

                                    Zusätzlich, wenn Du etwas Geld übrig oder eine nette Oma hast, sind folgende Bücher zu empfehlen:

                                    • Einführung in Perl von Randal L. Schwartz und Tom Phoenix (ISBN: 3-89721-147-5) - Bekannt als das Lama-Buch
                                    • Programmieren mit Perl von Larry Wall (Perl-Erfinder), Tom Christiansen und Jon Orwant (ISBN: 3-89721-144-0) - Bekannt als das Kamel-Buch
                                    • Das Perl-Kochbuch von Tom Christiansen und Nathan Torkington (ISBN: 3-89721-140-8) - Begleitbuch zu "Programmieren mit Perl" mit Beispielen, Problemen und Lösungen

                                    Das mit der netten Oma ist nicht von der Hand gegriffen, ich habe eben die Preise addiert und komme auf über 140,- €! Dabei habe ich die Bücher 2 oder 3 Jahre schon (3. Auflage, es gibt vom Lama-Buch auf jeden Fall eine 4. Auflage - nachschlagen kannst beim O-Reilly-verlag). Leider kam ich bisher nicht dazu, die Bücher fertig zu lesen!

                                    ich mache ein praktikum und auf einmal hab ich solche aufgaben bekommen !!!

                                    Als was, wenn man fragen darf?

                                    [1] Ich kann zwar englische Texte lesen, bei Fachartikeln bekomme ich allerdings schnell regelrecht Kopfschmerzen ;)

                                    Viele Grüße aus Frankfurt/Main,
                                    Patrick

                                    --

                                    _ - jenseits vom delirium - _
                                    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                    Nichts ist unmöglich? Doch!
                                    Heute schon gegökt?
                                    1. Hallo Patrick,

                                      du hast völlig recht...ich sollte mich auch bei Struppi und Siechfred bedanken...alle haben wirklich geholfen, aber da deine erklärungen für mich verständlicher / konkreter waren, bist du als erster dran gekommen !!!

                                      ich bin ein wirtschaftsinformatiker und mach einfach diese praktikum für juli...und da die aufgaben vorher nicht bekannt waren und es kommen immer wieder neue und kleine aufgaben, bei manchen man sich gar nicht auskennt und bei manchen schon... also es ist keine fixe stelle für irgendein bestimmtes projekt, sondern kleinere aufgaben von allen möglichen bereichen...

                                      danke für deine tipps für die bücher... ich werde mit der english-doku anfangen...

                                      und was macht ihr eigentlich ?

                                      lg,
                                      Edi

                                      1. Hallo Edi!

                                        und was macht ihr eigentlich ?

                                        Also, Siechfred ist ein großer Steuermann ;)
                                        Struppi - weiß ich nicht so genau, und ich... tu im Moment viel zu wenig ;)

                                        Viele Grüße aus Frankfurt/Main,
                                        Patrick

                                        --

                                        _ - jenseits vom delirium - _
                                        [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                        Nichts ist unmöglich? Doch!
                                        Heute schon gegökt?
                                        1. Hallo Leute,

                                          ich hab das Problem immernoch nicht geschafft !!
                                          ich bekomme jetzt- wie Struppi gesagt hat - eine Meldung dass ein Fehler aufgetreten ist:

                                          Execution of /apache/cgi-bin/farid/openfile.pl aborted due to compilation errors.

                                          und my code shaut so aus:

                                          my $Name = "t.log.".$Jahr.$Monat.$Monatstag;
                                          chdir("/applications/tcmon/logs/");
                                          open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen";
                                          while(<DATEI>) {
                                            my $Zeile = $_;
                                            chomp $_;
                                            (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = split(/;/ , $Zeile);
                                          }
                                          close DATEI;

                                          print "Content-type: text/html\n\n";
                                          print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
                                          print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>\n<meta http-equiv="refresh" content="240";>\n</head><body><table>\n";
                                          print "<tr><th>User</th><th>SystemunderTest</th><th>Release</th><th>Testcase</th><th>Startdate</th><th>Starttime</th></tr>\n";
                                          print "<tr><td>$dvname</td><td>$sut</td><td>$release</td><td>$testcase</td><td>$startdate</td><td>$starttime</td></tr>\n";
                                          print "</table></body></html>\n";

                                          und ich sitze seit paar stunden und kann die fehler nicht finden...könnt ihr mir helfen ?!

                                          danke,
                                          Edi

                                          1. und ich sitze seit paar stunden und kann die fehler nicht finden...könnt ihr mir helfen ?!

                                            Ich hab dir bereits hier gesagt wie du an die Fehlermeldungen kommst
                                            https://forum.selfhtml.org/?t=155602&m=1013069

                                            Struppi.

                                            1. Hallo Struppi,

                                              danke...ich hab erst jetzt verstanden was du gemeint hast...ich hab es unter dos ausgeführt und ich habe folgende fehler bekommen:
                                              Global symbol "$dvname" requires explicit package name at openfile.pl line 31.

                                              und für alle andere variablen auch.

                                              das heißt quasi dass ich die variable deklarieren muss, oder ?
                                              aber wie genau ?

                                              my($dvname)= ?

                                              Edi

                                              1. das heißt quasi dass ich die variable deklarieren muss, oder ?

                                                Ja.

                                                aber wie genau ?

                                                http://perldoc.perl.org/functions/my.html Perldoc ist übrigens auch auf deinem Rechner (auch als HTML Dateien)

                                                Struppi.

                                                1. ist das eigentlich ein problem, wenn man use strict weglässt ?

                                                  Edi

                                                  1. ist das eigentlich ein problem, wenn man use strict weglässt ?

                                                    Ein Problem nicht, ein Problem wird das erst, wenn du z.b. einen Tippfehler im Namen einer Variabel hast, der nur schwer erkennbar ist. use strict sagt dir das ohne wirst du u.U. Stundenlang suchen müssen woran der Fehler liegt.

                                                    übrigens auch das steht in der Doku, du solltest dich wirklich mal einen Nachmittag hinsetzten und Perldoc lesen, das ist mit Sicherheit keine Verschwendete Zeit

                                                    Struppi.

                                                    1. Hallo Struppi,

                                                      du hast völlig recht...ich muss mich wirklich damit auseinander setzen. aber das problem ist dass ich nicht so lange bei dieser aufgabe hängen bleiben darf und ich muss es schnell abgeben.

                                                      also das problem hab ich auch gelöst. jetzt hab ich aber noch eins( hoffentlich das letzte) und zwar bei der ausgabe wenn ich die zeilen splitte und in die tabellen gebe wird nur die letzte zeile ausgegeben und nicht die gesamte datei. hast du vielleicht eine ahnung woran das liegen konnte ?

                                                      my $Name = "t.log.".$Jahr.$Monat.$Monatstag;
                                                      chdir("/applications/tcmon/logs/");
                                                      open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen";
                                                      while(<DATEI>) {
                                                        my $Zeile = $_;
                                                        chomp $_;
                                                        ($dvname, $sut, $release, $testcase, $startdate, $starttime) = split(/;/ , $Zeile);
                                                      }
                                                      close DATEI;

                                                      print "Content-type: text/html\n\n";
                                                      print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
                                                      print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>\n<meta http-equiv="refresh" content="240";>\n</head><body><table border="1" align="center">\n";
                                                      print "<tr><th>User</th><th>System under Test</th><th>Release</th><th>Testcase</th><th>Start date</th><th>Start time</th></tr>\n";
                                                      print "<tr><td>$dvname</td><td>$sut</td><td>$release</td><td>$testcase</td><td>$startdate</td><td>$starttime</td></tr>\n";
                                                      print "</table></body></html>\n";

                                                      danke !
                                                      Edi

                                                      1. du hast völlig recht...ich muss mich wirklich damit auseinander setzen. aber das problem ist dass ich nicht so lange bei dieser aufgabe hängen bleiben darf und ich muss es schnell abgeben.

                                                        Naja, tagelang was falsch machen ist natürlich auch nciht schnell und ob es schneller ist, als sich mal mit der Materie ein wenig auseinanderzusetzen wage ich zu bezeifeln.

                                                        also das problem hab ich auch gelöst.

                                                        Du hast my rausgeschmissen? Das ist natürlich keine Lösung.

                                                        my $Name = "t.log.".$Jahr.$Monat.$Monatstag;
                                                        chdir("/applications/tcmon/logs/");
                                                        open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen";

                                                        Du kannst und solltest dir auch den Grund für einen evtl. Fehler anzeigen lassen.

                                                        open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";

                                                        while(<DATEI>) {
                                                          my $Zeile = $_;
                                                          chomp $_;
                                                          ($dvname, $sut, $release, $testcase, $startdate, $starttime) = split(/;/ , $Zeile);
                                                        }

                                                        Du liest hier zeilenweise die Daten ein und machst nichts damit. Das ganze Konzept stimmt nicht. Du musst schon hier in der Schleife die Ausgabe machen, dann kannst du auch wieder my verwenden

                                                        Struppi.

                                                        1. Hallo Struppi!

                                                          Edi hat meine Korrektur auch nicht berücksichtigt, ohne die gar nicht gechompt wird. Besser wäre außerdem:

                                                          open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";

                                                          while(<DATEI>) {
                                                            my $Zeile = $_;
                                                            chomp $_;
                                                            ($dvname, $sut, $release, $testcase, $startdate, $starttime) = split(/;/ , $Zeile);
                                                          }

                                                          open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";
                                                          while(<DATEI>) {
                                                           chomp(my $Zeile = $_);
                                                            (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = split(/;/ , $Zeile);
                                                            print "<tr><td>$dvname</td><td>$sut</td><td>$release</td><td>$testcase</td><td>$startdate</td><td>$starttime</td></tr>\n";
                                                          }
                                                          close DATEI;

                                                          @Edi: Zum Verständnis bitte dieses Posting auch lesen!

                                                          Viele Grüße aus Frankfurt/Main,
                                                          Patrick

                                                          --

                                                          _ - jenseits vom delirium - _
                                                          [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                                          Nichts ist unmöglich? Doch!
                                                          Heute schon gegökt?
                                                          1. Edi hat meine Korrektur auch nicht berücksichtigt, ohne die gar nicht gechompt wird. Besser wäre außerdem:

                                                            und mit dem CGI Modul

                                                            #!/usr/bin/perl -w  
                                                            use strict;  
                                                            use CGI;  
                                                            print CGI::header(),  
                                                            CGI::start_html(),  
                                                            CGI::start_table();  
                                                              
                                                            open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";  
                                                            while(<DATEI>) {  
                                                            chomp;  
                                                            my ($dvname, $sut, $release, $testcase, $startdate, $starttime) = split(/;/ , $_);  
                                                            print CGI::Tr( CGI::td(  
                                                              [  
                                                              $dvname,  
                                                              $sut,  
                                                              $release,  
                                                              $testcase,  
                                                              $startdate,  
                                                              $starttime  
                                                              ]  
                                                              ));  
                                                            }  
                                                            close DATEI;  
                                                            print CGI::end_table(),  
                                                            CGI::end_html();
                                                            

                                                            Struppi.

                                                            1. Hallo Struppi!

                                                              Korinthenkakerei:

                                                              #!/usr/bin/perl -w
                                                              use strict;
                                                              use CGI;
                                                              print CGI::header(),
                                                              CGI::start_html(),
                                                              CGI::start_table();

                                                              open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";

                                                              ^Hier dürfte eine Fehlermeldung kommen oder nichts passieren, weil $Name bisher nicht definiert ist ;)

                                                              Und wie erweiterst Du das um die Tabel-Heads (<th>)? Etwa so:
                                                              print CGI::Tr( CGI::th(
                                                                [
                                                                User,
                                                                SystemunderTest,
                                                                Release,
                                                                Testcase,
                                                                Startdate,
                                                                Starttime
                                                                ]
                                                                ));

                                                              ?

                                                              Viele Grüße aus Frankfurt/Main,
                                                              Patrick

                                                              --

                                                              _ - jenseits vom delirium - _
                                                              [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                                              Nichts ist unmöglich? Doch!
                                                              Heute schon gegökt?
                                                              1. open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen, weil: $!";

                                                                ^Hier dürfte eine Fehlermeldung kommen oder nichts passieren, weil $Name bisher nicht definiert ist ;)

                                                                Stimmt, ich hatte diese Zeilen beim testen auskommentiert da ich mit DATA gearbeitet hatte

                                                                Und wie erweiterst Du das um die Tabel-Heads (<th>)? Etwa so:
                                                                print CGI::Tr( CGI::th(
                                                                  [
                                                                  User,
                                                                  SystemunderTest,
                                                                  Release,
                                                                  Testcase,
                                                                  Startdate,
                                                                  Starttime
                                                                  ]
                                                                  ));

                                                                Etwa - genauer z.b. so:
                                                                print CGI::Tr( CGI::th(
                                                                   [ qw/User SystemunderTest Release Testcase Startdate Starttime/ ]
                                                                ));

                                                                Struppi.

                                                                1. Hallo Struppi!

                                                                  Etwa - genauer z.b. so:
                                                                  print CGI::Tr( CGI::th(
                                                                     [ qw/User SystemunderTest Release Testcase Startdate Starttime/ ]
                                                                  ));

                                                                  Prima, ja. Das von mir gepostete brachte Fehlermeldung, so dass ich bevor Du das hier mit der Liste gepostet hast, es so probiert hatte:

                                                                  print CGI::Tr( CGI::th(
                                                                    [
                                                                    my $User = "User",
                                                                    my $SystemunterTest = "SystemunderTest",
                                                                    my $Release = "Release",
                                                                    my $Testcase = "Testcase",
                                                                    my $Startdate = "Startdate",
                                                                    my $Starttime = "Starttime"
                                                                    ]
                                                                    ));

                                                                  Aber die Liste ist natürlich kürzer, schöner, Perl-liker ;)

                                                                  Was mir aber nicht gefällt, ist die Ausgabe. Ich meine, den Quelltext:

                                                                  <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">

                                                                  Es kann aber sein, dass man gerade lang="de" braucht. Ferner ist die ganze Tabelle in einer einzigen Zeile, das macht eventuelle Wartungsarbeiten schwierig, falls man die Ausgabe in einer Datei zur weiteren Verwendung speichert.

                                                                  Ich nutze aus diesem Grund eher selbst formatierte heredoc-Abschnitte oder bei ganz langem HTML-Code eigene Templates (so lange ich mit HTML::Template nicht experimentiert habe). Oder läßt sich hier die Ausgabe aus dem CGI-Modul rumbiegen?

                                                                  Viele Grüße aus Frankfurt/Main,
                                                                  Patrick

                                                                  --

                                                                  _ - jenseits vom delirium - _
                                                                  [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                                                  Nichts ist unmöglich? Doch!
                                                                  Heute schon gegökt?
                                                                  1. print CGI::Tr( CGI::th(
                                                                      [
                                                                      my $User = "User",
                                                                      my $SystemunterTest = "SystemunderTest",
                                                                      my $Release = "Release",
                                                                      my $Testcase = "Testcase",
                                                                      my $Startdate = "Startdate",
                                                                      my $Starttime = "Starttime"
                                                                      ]
                                                                      ));

                                                                    Das ist natürlich Unsinn. Du musst hier keine Variabeln deklarieren und ausserdem kannst du auch eine Liste von Variabeln auch mit my() deklarieren du musst nicht jede einzeln mit my deklarieren (in dem Fall schon).

                                                                    Also wenn schon:

                                                                    my $User = "User";  
                                                                    my $SystemunterTest = "SystemunderTest";  
                                                                    my $Release = "Release";  
                                                                    my $Testcase = "Testcase";  
                                                                    my $Startdate = "Startdate";  
                                                                    my $Starttime = "Starttime";  
                                                                      
                                                                    print CGI::Tr( CGI::th( [$User, $SystemunterTest, $Release, $Testcase, $Startdate, $Starttime]  
                                                                    ));
                                                                    

                                                                    Wobei die Variabeln ja überflüssig sind.

                                                                    Was mir aber nicht gefällt, ist die Ausgabe. Ich meine, den Quelltext:

                                                                    <html xmlns="http://www.w3.org/1999/xhtml" lang="en-US" xml:lang="en-US">

                                                                    Es kann aber sein, dass man gerade lang="de" braucht. Ferner ist die ganze Tabelle in einer einzigen Zeile, das macht eventuelle Wartungsarbeiten schwierig, falls man die Ausgabe in einer Datei zur weiteren Verwendung speichert.

                                                                    Jetzt fängst du schon an wie der Christoph, normlaerweise ist der Output des CGI Moduls ja nicht für deine Augen bestimmt sondern für den browser und dem ist es erstmal egal ob das in einer Zeile ist oder nicht. Darüber hinaus läßt sich der DOCTYPE und auch ob der output in XHTML oder in reinem HTML erfolgt mit dem CGI Modul durchaus steuern - RTFM!
                                                                    Und um die Ausgabe menschenverträglichlesbar zu machen gibt es ebenfalls Module - die findest du, wie immer bei Perlmodulen hier: http://search.cpan.org/ (ich glaube das Modul heißt CGI::Prettyprint oder so ähnlich)

                                                                    Struppi.

                                                                    1. Hallo Struppi!

                                                                      Jetzt fängst du schon an wie der Christoph,

                                                                      Welcher? Christoph S.? Kann nicht sein, ich habe nie Holunderwein getrunken!

                                                                      Und um die Ausgabe menschenverträglichlesbar zu machen gibt es ebenfalls Module - die findest du, wie immer bei Perlmodulen hier: http://search.cpan.org/ (ich glaube das Modul heißt CGI::Prettyprint oder so ähnlich)

                                                                      Ein Modul CGI::Pretty ist in meinem Paket installiert. Mit dem ist der Code der Ausgabeseite auch leserlicher, danke!

                                                                      Viele Grüße aus Frankfurt/Main,
                                                                      Patrick

                                                                      --

                                                                      _ - jenseits vom delirium - _
                                                                      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                                                      Nichts ist unmöglich? Doch!
                                                                      Heute schon gegökt?
                                                                      1. Hallo Leute!

                                                                        ich hätte noch eine kurze frage...jetzt möchte ich die liste verkehrt ausgeben. die funktion dafür ist reverse(); aber da ich eine namenslose Array habe, wie soll ich es anwenden ?

                                                                        ich habs es so probiert, aber es mach´t nichts aus :

                                                                        (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = reverse((my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime));

                                                                        Edi

                                                                        1. ich habs es so probiert, aber es mach´t nichts aus :

                                                                          (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = reverse((my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime));

                                                                          (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = reverse split ...

                                                                          Struppi.

                                                                          1. (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = reverse split ...

                                                                            Argh, paste & Copy, das ist Unsinn.

                                                                            my ($dvname, $sut, $release, $testcase, $startdate, $starttime) = reverse split ...

                                                                            Struppi.

                                                                            1. so wird aber die zeile selbst verkehrt geschrieben, und nicht die gesamte zeilen. dh. bei user wird starttime geschrieben und ...

                                                                              my($dvname, $sut, $release, $testcase, $startdate, $starttime) =reverse split(/;/ , $Zeile);

                                                                              Edi

                                                                              1. so wird aber die zeile selbst verkehrt geschrieben, und nicht die gesamte zeilen. dh. bei user wird starttime geschrieben und ...

                                                                                Und was möchtest du tun? Willst du die Datei von unten nach oben ausgeben lassen?

                                                                                Siechfred

                                                                                --
                                                                                Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
                                                                                1. so wird aber die zeile selbst verkehrt geschrieben, und nicht die gesamte zeilen. dh. bei user wird starttime geschrieben und ...

                                                                                  Und was möchtest du tun? Willst du die Datei von unten nach oben ausgeben lassen?

                                                                                  ja genau Siechfred...da jede Test eine zeile besitz mit den ganzen informationen und die aktuellen aber immer ganz unten sind und man muss viel runterscrollen. ( wie gästebücher )

                                                                                  Edi

                                                                                  1. ja genau Siechfred...da jede Test eine zeile besitz mit den ganzen informationen und die aktuellen aber immer ganz unten sind und man muss viel runterscrollen. ( wie gästebücher )

                                                                                    Dateien rückwärts ausgeben ist nicht so einfach, es gibt dafür aber Module z.b. File::Backwards. aber dir muss klar sein, dass das extrem langsam ist

                                                                                    Struppi.

                                                                                  2. Und was möchtest du tun? Willst du die Datei von unten nach oben ausgeben lassen?
                                                                                    ja genau Siechfred...da jede Test eine zeile besitz mit den ganzen informationen und die aktuellen aber immer ganz unten sind und man muss viel runterscrollen. ( wie gästebücher )

                                                                                    Dann schau dir Tie::File an, damit bindest du alle Zeilen deiner Datei auf höchst ressourcenschonende Art und Weise an ein Array, auf das du dann reverse anwenden kannst oder es gleich von unten nach oben abarbeitest:

                                                                                    use Tie::File;  
                                                                                    tie my @array, 'Tie::File', $datei or die $!;  
                                                                                    for(my $i = $#array; $i >= 0; $i--) {  
                                                                                      # tu was mit der aktuellen Zeile  
                                                                                    }
                                                                                    

                                                                                    So in etwa.

                                                                                    Siechfred

                                                                                    --
                                                                                    Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
                                                                                    1. ok,danke, ich werde es mit Tie::File auch versuchen. wird die system damit auch langsam ?

                                                                                      Edi

                                                                                      1. ok,danke, ich werde es mit Tie::File auch versuchen. wird die system damit auch langsam ?

                                                                                        Nach meiner Erfahrung ist dies die ressourcenschonendste Art, eine Datei rückwärts einzulesen, das von Struppi genannte File::Backwars setzt IIRC auch darauf auf. Ach ja, die aktuelle Zeile erhältst du via $array[$i] (nur der Vollständigkeit halber).

                                                                                        Siechfred

                                                                                        --
                                                                                        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
                                                                2. Hallo Leute,

                                                                  ich bin auf meine fehler gekommen. Danke für eure Tipps.
                                                                  jetzt funktioniert alles super...

                                                                  ich hab wirklich viel von euch gelernt und hab gelernt wo ich nachschlagen soll und auf was ich achten sollte.

                                                                  lg,
                                                                  Edi

                                          2. ich sitze seit paar stunden und kann die fehler nicht finden...könnt ihr mir helfen ?!

                                            Dein Fehler sollte nach Lektüre dieses Archivpostings klar sein:
                                            http://forum.de.selfhtml.org/archiv/2007/5/t152749/#m994355

                                            Die Theorie auf ein konkretes Problem angewandt:
                                            http://forum.de.selfhtml.org/archiv/2007/6/t154453/#m1005395

                                            Siechfred

                                            --
                                            Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
                                            1. ich hab jetzt verucht die variablen statt mit my mit our zu deklarieren. es kommt aber genauso zu dem selben fehler.

                                              wenn ich auch die use strict weg lasse, bekomme ich als ausgabe nur meine <th>, jedoch nicht die variablen.

                                              Edi

                                          3. Hallo Edi!

                                            und my code shaut so aus:

                                            my $Name = "t.log.".$Jahr.$Monat.$Monatstag;
                                            chdir("/applications/tcmon/logs/");
                                            open(DATEI,"<$Name") || die "Konnte Datei nicht öffnen";
                                            while(<DATEI>) {
                                              my $Zeile = $_;
                                              chomp $_;
                                              (my $dvname, my $sut, my $release, my $testcase, my $startdate, my $starttime) = split(/;/ , $Zeile);
                                            }
                                            close DATEI;

                                            print "Content-type: text/html\n\n";
                                            print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">', "\n";
                                            print "<html><head><title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>\n<meta http-equiv="refresh" content="240";>\n</head><body><table>\n";
                                            print "<tr><th>User</th><th>SystemunderTest</th><th>Release</th><th>Testcase</th><th>Startdate</th><th>Starttime</th></tr>\n";
                                            print "<tr><td>$dvname</td><td>$sut</td><td>$release</td><td>$testcase</td><td>$startdate</td><td>$starttime</td></tr>\n";
                                            print "</table></body></html>\n";

                                            Schau mal wo sich die print-Anweisung print "<tr><td>$dvname</td>...."; sich hier befindet, und vergleiche mit deinem obigen Code.
                                            Schlage nach, wie und wann mit my deklarierte Variablen gültig sind, bzw. mach dich kundig über deren Gültigskeitsbereich.

                                            Ich habe den Code, den ich hier gepostet habe, übrigens bei mir getestet. Keine Fehler. Zum Testen hatte ich 10 mal die eine Zeile aus deinem Posting in eine txt-Datei kopiert.

                                            Viele Grüße aus Frankfurt/Main,
                                            Patrick

                                            --

                                            _ - jenseits vom delirium - _
                                            [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                            Nichts ist unmöglich? Doch!
                                            Heute schon gegökt?
                              2. Nachhakemuss...

                                my $str = 'Fischers Fritze fischte frische Fische';

                                print join ' ', (split / /, $str)[3,4,2,0,1];

                                
                                > > Soviel aus der Abteilung "What Perl can do for You" ;)  
                                > Fein! print gefolgt von einer Funktion war mir nicht bekannt...  
                                  
                                ... und deswegen habe ich gleich rumexperimentiert:  
                                  
                                @thread\_beteiligten = qw!Edi Struppi Patrick Siechfred!;  
                                #^Chronologische Auftrittsreihenfolge  
                                print reverse @thread\_beteiligten;  
                                #^Ausgabe = SiechfredPatrickStruppiEdi  
                                print sort @thread\_beteiligten;  
                                #^Ausgabe = EdiPatrickSiechfredStruppi  
                                  
                                Soweit so gut. Aber warum ergibt:  
                                  
                                $name = "Patrick";  
                                print reverse $name;  
                                  
                                immer noch Patrick, während:  
                                  
                                $eman = reverse $name;  
                                print $eman;  
                                  
                                wie gewünscht ckirtaP ergibt?  
                                  
                                Viele Grüße aus Frankfurt/Main,  
                                Patrick
                                
                                -- 
                                ![](http://www.atomic-eggs.com/clubsig.gif)  
                                  
                                \_ - jenseits vom delirium - \_  
                                  
                                [[link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash](http://www.atomic-eggs.com/)]  
                                Nichts ist unmöglich? [Doch!](http://www.atomic-eggs.com/cwi/cwi_4.shtml)  
                                Heute schon ge[gök](http://goek.atomic-eggs.com/goek_goek.html)t?
                                
                                1. Aber warum ergibt:
                                  $name = "Patrick";
                                  print reverse $name;
                                  immer noch Patrick

                                  Weil print sowohl im Listenkontext als auch im skalaren Kontext ausgeführt werden kann, sprich: Du kannst der Funktion eine Liste, aber auch einen String zur Ausgabe vorwerfen. Nun wird reverse stets im Listenkontext ausgeführt (steht da auch obendrüber: reverse LIST). Also nimmt die Funktion deinen String, wertet ihn als Liste mit einem Element 'Patrick' aus und dreht die Listenreihenfolge um - keine Änderung, ist ja nur 1 Element :)

                                  $eman = reverse $name;
                                  print $eman;

                                  Hier weist du den Rückgabewert von reverse explizit einem Skalar zu und "erzwingst" so den skalaren Kontext. Das geht bei Print halt nicht, da diese Funktion sowohl Listen als auch Skalare verarbeitet. Lösung: Verwende zusätzlich irgendeine Funktion, die nur im skalaren Kontext ausgeführt wird. Die simpelste wäre scalar, aber auch sowas wie uc, lc oder ucfirst wären denkbar:

                                  my $str = 'Patrick';  
                                  print scalar reverse $str; # kcirtaP  
                                  print uc reverse $str; # KCIRTAP
                                  

                                  Siechfred

                                  --
                                  Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
                                  1. Hallo Siechfred!

                                    Ich dachte schon fast, dass es mit skaralrem /Listenkontext zu tun hat. Aber so gut erklärt, wie Du es jetzt gemacht hast, ist es im Lama-Buch nicht ;)

                                    Danke dafür!

                                    Warnung: es könnten weitere Fragen folgen ;)

                                    Viele Grüße aus Frankfurt/Main,
                                    Patrick

                                    --

                                    _ - jenseits vom delirium - _
                                    [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
                                    Nichts ist unmöglich? Doch!
                                    Heute schon gegökt?
                                    1. Hallo.

                                      Ich dachte schon fast, dass es mit skaralrem /Listenkontext zu tun hat.

                                      Im sakralen Kontext soll selbst Perl schnell an seine Grenzen gelangen.
                                      MfG, at

                                      1. Ich dachte schon fast, dass es mit skaralrem /Listenkontext zu tun hat.

                                        Im sakralen Kontext soll selbst Perl schnell an seine Grenzen gelangen.

                                        Wieso?
                                        Perl bietet auf der Ebene doch was bless

                                        Struppi.

                                        1. Hallo.

                                          Im sakralen Kontext soll selbst Perl schnell an seine Grenzen gelangen.

                                          Wieso?
                                          Perl bietet auf der Ebene doch was bless

                                          Gebenedeit sei die Frucht deiner Perle.
                                          MfG, at

        2. Hallo edi!

          und wo soll ich die Java-Script einfügen ?!

          Wenn Du JavaScript für einen Refresh willst, innerhalb von <head> und </head> in einem <script type="text/javascript"></script>-Bereich. Die meta-Refresh-Lösung, falls Du doch diese bevorzugst, kommt auch zwischen <head> und </head>.

          Bei längerem HTML-Code empfiehlt sich diese Variante:

          print <<"DELIM";
          Hier dein direkter HTML code
          DELIM

          ^ Eine Leerzeile nach dem Delimiter (Hier DELIM genannt. Siehe Inhalte senden).

          print <<"DELIM";
          <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
          <html>
          <head>
          <title>log-Ausgabe von $Monatstag/$Monat/$Jahr</title>
          <meta refresh .....>
          <script type="text/javascript">
          .
          .
          .
          </script>
          </head>
          <body>
          DELIM

          foreach(@Zeilen) {
                 print "$_<br>\n";
             }

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

          Was will der Auftraggeber? Einfach die Logs als Text? Denn so, wie Du die Datei ausgibst, ist es nichts anderes als ein "Reinkopieren" würde ich sagen. Die Ausgabe sieht genauso aus, als würde er die Log-Datei direkt im Browser öffnen. Da lässt sich mehr draus machen.

          Viele Grüße aus Frankfurt/Main,
          Patrick

          --

          _ - jenseits vom delirium - _
          [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
          Nichts ist unmöglich? Doch!
          Heute schon gegökt?