Forum Doku Wiki Blog

Forumsarchiv 2007, April
STDIN einlesen, leere Variable

archivierte Beiträge lesen

  1. (PERL) STDIN einlesen, leere Variable von wusel101, 01. 04. 2007, 15:59

STDIN einlesen, leere Variable

Der folgende Beitrag wurde am 01. 04. 2007, 15:59 Uhr von wusel101 veröffentlicht.

Hallo!

Habe die Lösung für das im Archiv z.B. unter:
http://forum.de.selfhtml.org/archiv/2001/5/t24555/

beschriebene Problem (leere Variable: STDIN lässt sich nicht
einlesen) per Zufall mit "try + error" gefunden:

Habe (wie viele) zum Auffinden von Fehlern am Anfang der Perlscripts:

#!/usr/bin/perl --
use CGI;
use CGI::Carp qw(fatalsToBrowser warningsToBrowser);
use CGI qw(:standard); print header();
warningsToBrowser(1);

Soweit so gut. Später werden dann Formulardaten eingelesen mit:

if($ENV{'REQUEST_METHOD'} eq 'GET') { $Daten = $ENV{'QUERY_STRING'} }
 else { binmode STDIN;
# bzw.: Einlesen im POST-mode, $Daten  bis Länge des Strings:
read STDIN, $Daten, $ENV{'CONTENT_LENGTH'};  } ;

Dann war aber jedesmal unerklärlicherweise $Daten LEER.

ABER:
sobald ich die Zeilen am Anfang wegmache, insbesondere die Zeile:

use CGI qw(:standard); print header();

funktioniert es wieder _tadellos_ !!!

D.h. (...eigentlich unerklärlicherweise) führt die "Fehleranzeigeroutine" zu einem scheinbar leeren STDIN.
(Nur "scheinbar", denn $ENV{'CONTENT_LENGTH'} ergab auch hier _immer_ einen Wert grösser Null, selbst wenn $Daten einfach nur leer blieb, was ja ein Widerspruch in sich ist und nicht sein konnte. )

Gruss,
Chris

www.salsa.at



STDIN einlesen, leere Variable

Der folgende Beitrag wurde am 01. 04. 2007, 16:03 Uhr von Cheatah veröffentlicht.

Hi,

> Habe die Lösung für das im Archiv z.B. unter:
> http://forum.de.selfhtml.org/archiv/2001/5/t24555/

ui.

> sobald ich die Zeilen am Anfang wegmache, insbesondere die Zeile:
> use CGI qw(:standard); print header();
> funktioniert es wieder _tadellos_ !!!

Ei.

> D.h. (...eigentlich unerklärlicherweise) führt die "Fehleranzeigeroutine" zu einem scheinbar leeren STDIN.

Absolut nicht unerklärlicherweise. In STDIN liegen die POST-Daten, die vom CGI-Modul initial eingelesen werden, was die Standard-Eingabe leert.

> (Nur "scheinbar", denn $ENV{'CONTENT_LENGTH'} ergab auch hier _immer_ einen Wert grösser Null, selbst wenn $Daten einfach nur leer blieb, was ja ein Widerspruch in sich ist und nicht sein konnte. )

Der HTTP-Header Content-Length sagt auch dann noch, wie viele Daten übertragen wurden, wenn diese bereits gelesen worden sind. Aus welchem Grund sollte man eigentlich die POST-Daten selbst analysieren wollen? Das CGI-Modul meistert diese Aufgabe hervorragend.

Cheatah

--
X-Self-Code: sh:( fo:} ch:~ rl:° br:> n4:& ie:% mo:) va:) de:] zu:) fl:{ ss:) ls:~ js:|
X-Self-Code-Url: http://emmanuel.dammerer.at/selfcode.html
X-Will-Answer-Email: No
X-Please-Search-Archive-First: Absolutely Yes

STDIN einlesen, leere Variable

Der folgende Beitrag wurde am 01. 04. 2007, 16:33 Uhr von _roro veröffentlicht.

Moin,

mit PERL STDIN einlesen? Das geht so:

my $in = <STDIN>; # Script wartet auf Eingabe....

print chomp($in), "\n"; # gibt das oder die eingegebenen Zeichen aus, nachdem [Enter] gedrückt wurde.

Du siehst also, mit einem einfachen print-Befehl, was an STDIN eingegeben wurde.

--roro

STDIN einlesen, leere Variable

Der folgende Beitrag wurde am 02. 04. 2007, 08:51 Uhr von Siechfred veröffentlicht.

> Du siehst also, mit einem einfachen print-Befehl, was an STDIN eingegeben wurde.

Ähm, es ging doch um CGI, oder?

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.

STDIN einlesen, leere Variable

Der folgende Beitrag wurde am 01. 04. 2007, 16:41 Uhr von *Markus veröffentlicht.

Hallo,

> ABER:
> sobald ich die Zeilen am Anfang wegmache, insbesondere die Zeile:
>
> use CGI qw(:standard); print header();
>
> funktioniert es wieder _tadellos_ !!!

Wenn du einen Header _vor_ der Datenaufbereitung ausgibst, wird alles nach diesem Befehl als text/html, bzw text/plain interpretiert.

Markus
--
http://www.apostrophitis.at

STDIN einlesen, leere Variable

Der folgende Beitrag wurde am 01. 04. 2007, 19:37 Uhr von Struppi veröffentlicht.

> #!/usr/bin/perl --
> use CGI;

Du bindest hier das Modul ein...

>
> if($ENV{'REQUEST_METHOD'} eq 'GET') { $Daten = $ENV{'QUERY_STRING'} }
> else { binmode STDIN;
> # bzw.: Einlesen im POST-mode, $Daten  bis Länge des Strings:
> read STDIN, $Daten, $ENV{'CONTENT_LENGTH'};  } ;

Warum nutzt du es nicht?

Struppi.
--
Javascript ist toll (Perl auch!)

© 1998-2013 SELFHTMLImpressumSoftware: Classic Forum 3.4