Hallo, On Sun, 08 Jun 2003, Sascha Andres wrote:
habe ein kleines Perl Programm (nicht selber geschrieben, von irgendeiner Webseite oder hier aus der Liste), welches die Absender Adresse aus einer Mail holt. Das klappt auch so weit, nur steht manchmal ein Leerzeichen davor. [..] ,----[ test ]-
Du sollst deine scripte nicht 'test' nennen!!! Das ist ein shell-builtin und ein normales Programm!
| #!/usr/bin/perl -wn | # Picks out the actual address from the "From:" line | | my($var) = ""; | | unless (/\) { $var .= $_; } else { $var .= /<([^>]+)/; } | | print $var; `----
Aeh, was soll das? Willst du denn die gesamten Header ausgeben?
Leider kommt da immer eine 1 raus.
Erstens verwendest du 'my' faslch. Entweder: my $var = ""; ## scalar = scalar oder: my ( $var ) = ( "" ); ## array = array Zweitens verwendest du 'm//' faschl, was der Grund fuer dein Problem ist. Siehe 'perldoc -f m'. Folgende Moeglichkeiten hast du: if(/^From: /) { my $var = ""; unless (/\) { $var .= $_; } else { if(/\<([^>]+)/) { $var = $1; } } print $var; } oder: if(/^From: /) { if(/\<([^>]+)/) { print $1; } else { print; } } oder: if(/^From: /) { my $var; unless(/\) { $var = $_; } else { ($var) = m/\<([^>]+)/; } print $var; } oder mit 's///': if(/^From: /) { if (/\) { s/.*\<([^>]+).*/$1/; } print; } Du kannst auch Hilfsvariablen verwenden, wenn du unbedingt willst: if(/^From: /) { if (/\) { s/.*\<([^>]+).*/$v = $1/e; } else { $v = $_; } print $v; } Oder natuerlich eine Variante von irgendeinem der Beispiele... TMTOWTDI! :) Noch Fragen? HTH, -dnh -- I'd beat my head against a wall but brain damage is the first step to an MCSE, and I'm not that far gone yet. -- random in asr