<STDIN> abfangen
Dirk
- perl
hi,
ich hab folgendes problem und weder im forumsarchiv noch sonstwo 'ne lösung gefunden:
ich möchte, daß eingehende emails an einen bestimmten user sofort nach eingang von einem script weiterverarbeitet werden. dazu hab ich 'nen alias angelegt (eintrag in /etc/aliases: user_xy: "|/usr/bin/perl /usr/local/user_xy/cgi-bin/mailbox.pl"). code in mailbox.pl:
<schnipp>
my $data = <STDIN>;
open(MAIL, ">/usr/local/user_xy/mailbox/test.txt");
print MAIL "$data";
close(MAIL);
<schnapp>
das klappt auch soweit...bis zum ende der ersten, übergebenen zeile, mehr steht nämlich in test.txt nicht drin. eine mail incl. headers besteht allerdings aus vielen zeilen. ich weiß, daß in der vordef. variable $/ das newslinezeichen voreingestellt ist, welches ich auch ändern kann, aber in was? oder besser: wann weiß ich, daß die eingabe beendet ist? oder kann ich schon vorher das newslinezeichen aus der eingabe eliminieren?
für lösungsvorschläge wäre ich sehr dankbar.
gruß,
Dirk
Hallo,
das klappt auch soweit...bis zum ende der ersten, übergebenen zeile, mehr
steht nämlich in test.txt nicht drin.
Kein Wunder. Du liest ja mit
my $data = <STDIN>;
Auch nur eine Zeile ein.
Viel besser waere wohl
while(<STDIN>) {
print OUTFILE $_;
}
oder
{
local $/;
print OUTFILE <STDIN>;
}
Mehr zu $/ gibts in `perldoc perlvar'
Gruesse,
CK
hi,
Moin Moin !
ich hab folgendes problem und weder im forumsarchiv noch sonstwo 'ne lösung gefunden:
ich möchte, daß eingehende emails an einen bestimmten user sofort nach eingang von einem script weiterverarbeitet werden. dazu hab ich 'nen alias angelegt (eintrag in /etc/aliases: user_xy: "|/usr/bin/perl /usr/local/user_xy/cgi-bin/mailbox.pl"). code in
^---- warum liegt das Script in cgi-bin, wenn es vom Mailer aufgerufen wird ? Da hat es nichts verloren!
mailbox.pl:
<schnipp>
my $data = <STDIN>;
"Liebes Perl, lies bitte *eine* Zeile aus dem Dateihandle STDIN."
open(MAIL, ">/usr/local/user_xy/mailbox/test.txt");
print MAIL "$data";
^-- Interpolation (double quotes) ist hier Unsinn.
close(MAIL);
Warum schreibst Du das in Perl ?
in /etc/aliases:
user_xy: | cat - > /usr/local/user_xy/mailbox/text.txt
Ansonsten, in Perl:
my $data=join ('',<STDIN>);
^-- alles in einem String
oder so:
open(MAIL, ">/usr/local/user_xy/mailbox/test.txt");
my $line;
while (defined ($line=<STDIN>)) {
print MAIL $line;
}
close(MAIL);
<schnapp>
das klappt auch soweit...bis zum ende der ersten, übergebenen zeile, mehr steht nämlich in test.txt nicht drin. eine mail incl. headers besteht allerdings aus vielen zeilen. ich weiß, daß in der vordef. variable $/ das newslinezeichen voreingestellt ist, welches ich auch ändern kann, aber in was? oder besser: wann weiß ich, daß die eingabe beendet ist? oder kann ich schon vorher das newslinezeichen aus der eingabe eliminieren?
für lösungsvorschläge wäre ich sehr dankbar.
Aber sicher doch: Lies mal das eine oder andere gute Perl-Buch, für's erste tut's aber auch die mitgelieferte Doku.
Alexander
gruß,
Dirk