Alex Gots: Eine Weiche für STDOUT?

Hallo,

ich möchte gerne wissen, ob es möglich ist eine Weiche im Skript für STDOUT schreiben, die ein Mal Daten in den Browser schreibt und ein anderes Mal in eine HTML-Datei?

z.B.

8<----------------8<----------------8<

my $signal = 0;

if ($signal == 1){
    STDOUT = $Dateiname;
}
else{}

print <<HTML;

Content-type: text/html

<html>
Test...
</html>

HTML

8<----------------8<----------------8<

Danke für Ihre baldige Beiträge

  1. Sup!

    Bestimmt. Sieh' nach im Perl-Buch Deines Vertrauens oder im Internet.

    Gruesse,

    Bio

    1. Hallo Bio,

      Bestimmt. Sieh' nach im Perl-Buch Deines Vertrauens oder im Internet.

      Danke, super! Sehr destruktive Antwort. :( Im Buch (Wall, L: Programmiern mit Perl ISBN 3-930673-48-7) habe ich schon nachgeschaut und bereits gegooglet... sonst würde ich nicht fragen!

      Danke ;)

  2. Moin,

    ich möchte gerne wissen, ob es möglich ist eine Weiche im Skript für STDOUT schreiben, die ein Mal Daten in den Browser schreibt und ein anderes Mal in eine HTML-Datei?

    Mach eine Funktion, die dir abhängig vom Signal das entsprechende Handle ausspuckt:

    sub getHandle() {
       my $handle;
       if ($_[0] = 0) {$handle = \ *STDOUT; }
       else {
          open OUTPUT, ">index.html" or die "Cannot open index.html";
          $handle = \ *OUTPUT;
       }
       return($handle);
    }

    my $output_handle = getHandle($signal);
    print $output_handle "blabla";
    ...

    Meinst du sowas?

    Gruesse,
    Joerg

    1. Hallo Joerg,

      Meinst du sowas?

      Ja, aber ich muss noch ausprobieren. Danke!

    2. Hallo nochmal,

      my $output_handle = getHandle($signal);
      print $output_handle "blabla";
      ...

      Meinst du sowas?

      In meinem Code verwende ich "Here"-Dokument (um Textblock als Ganzes auszugeben). Deswegen hackt's noch an dieser Stelle...

      Sowas:

      8<-------------<8-------------<8

      print $output_handle<<BLOCK;

      <html>

      Text Anfang...

      BLOCK

      [...]

      print $output_handle<<BLOCK;

      ...Text Ende.

      </html>

      BLOCK

      8<-------------<8-------------<8

      funktioniert nicht. :(

      1. Tach,
        wie wärs mit:
        my $HTMLString = <<BLOCK ;

        <html>

        Text Anfang...

        BLOCK

        $HTMLString += <<BLOCK ;

        ...Text Ende.

        </html>

        BLOCK

        print $output_handle $HTMLString;

        1. Tach,
          wie wärs mit:
          my $HTMLString = <<BLOCK ;

          <html>

          [...]

          BLOCK

          print $output_handle $HTMLString;

          Der Perl meldet sich mit:

          Argument "[HTML-CODE] " isn't nummeric in addition (+) at Zeile-Nr.[XX]

          Wenn ich also mein Skript über den Browser aufrufe, dann kriege ich "0" angezeigt.

          1. Tach,

            Argument "[HTML-CODE] " isn't nummeric in addition (+) at Zeile-Nr.[XX]

            Ich vermute mal nicht, dass Du vorhattest, CODE von HTML abzuziehen, oder?
            In anderen Worten, dein Handle oder eine deiner Variablen heisst "HTML-CODE", richtig?

            Perl erkennt so etwas nicht als zusammengesetzten Namen sondern als arithmetische Operation ("HTML minus CODE"), daher diese Fehlermeldung.

            Versuchs mal mit einem anderen Namen, so etwas wie HTML_CODE oder HtmlCode.

            Gruesse,
            Joerg

            1. Perl erkennt so etwas nicht als zusammengesetzten Namen sondern als arithmetische Operation ("HTML minus CODE"), daher diese Fehlermeldung.

              Versuchs mal mit einem anderen Namen, so etwas wie HTML_CODE oder HtmlCode.

              Ne, damit meinte ich irgendwelchen HTML-Kode. ;) Also [HTML-CODE] entspreche z.B.:

              <html>
              <title>Test</title>
              <body>Text...</body>
              </html>

  3. Hi,

    ich möchte gerne wissen, ob es möglich ist eine Weiche im Skript für STDOUT schreiben, die ein Mal Daten in den Browser schreibt und ein anderes Mal in eine HTML-Datei?
    my $signal = 0;

    sieht nach Perl aus.

    Filter::tee könnte dann das richtige sein.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.