Rückgabe

Hallo,

my $ipadresse;
open(FIRE, „d:/syslog.txt“);
while()
{
if (m/IP address is/)
{
$_ =~/(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})/;
print „\n$1“; # OK, wird angezeigt
$ipadresse=$1;
}
}
close(FIRE);
print „Aktuelle IP-Adresse:\t $ipadresse“;

diese Zeile wird nicht angezeigt ?

Nur letzte Übereinstimmung brauche ich.
Wo liegt mein Denkfehler?

Danke Ralf

Hi Ralf (ich bin’s schon wieder),

kann es sein, daß evtl. eine Zeile zwar den ersten Test betsteht (–> m/IP address is/), aber beim 2. Mal, wo die IP-Adr. gesucht wird, durchfällt? In der Ausgabe (–> print „\n$1“:wink: würden dann Leerzeilen erscheinen, weil der ‚Nicht-Match‘ dazu führt, daß $1 geleert wird…

Immerhin eine Möglichkeit. Vielleicht solltest du die Zuweisung nur dann machen, wenn $1 einen Inhalt hat.

Gruß
bernhard

Hi Bernhard (ich bin’s schon wieder),

kann es sein, daß evtl. eine Zeile zwar den ersten Test
betsteht (–> m/IP address is/), aber beim 2. Mal, wo die
IP-Adr. gesucht wird, durchfällt? In der Ausgabe (–> print
„\n$1“:wink: würden dann Leerzeilen erscheinen, weil der
‚Nicht-Match‘ dazu führt, daß $1 geleert wird…

Leider nein. Ich gebe zum Test die gefunden IP’s in eine
KONTROLL_DATEI aus. Das funktioniert.

Ich habe die Logdatei von Hand editiert:
nur 3 Zeilen mit denselben Inhalt. syslog.txt :

2002.14.11-18:32:54 bingo.network.local, PPP: A: local IP address is 212.144.111.231, remote is 145.253.1.45d:\neue_ip.txt’);
open(FIRE, „d:/syslog.txt“);

while()
{
if (m/IP address is/) # abgewiesen?
{
$_ =~/(\d{1,3}.\d{1,3}.\d{1,3}.\d{1,3})/;
print „\n$1“;
print KONTROLLE_DATEI „$1\n“;
}
}
close(FIRE);
close(KONTROLLE_DATEI);
print „\n*************\n“;
print „Aktuelle IP-Adresse:\t$1“;

Nun erfolgt die Einbindung der IP-Adresse

in eine HTML-Seite.

Versende autom. (per FTP) die HTML-Seite, wenn sich die IP-

Adresse geändert hat.

****************************************************

Gruß
ralf

Hi Ralf,

ich mußte selbst ein wenig in meiner Erinnerung kratzen, aber die Lösung liegt wohl im ‚dynamic scope‘ der Variablen $1 etc.

Im Camelbook findet sich die folgende Erklärung:

$`, $&, $’, and the numbered variables are global variables implicitly localized to the enclosing dynamic scope. They last until the next successful pattern match or the end of the current scope, whichever comes first. More on this later, in a different scope.

–> d.h. außerhalb des akutellen ‚dynamic scopes‘ (in diesem Fall der if-Block) ist die Variable $1 nicht mehr definiert, und deswegen LEER!

Macht man es dagegen so, klappts auch wieder.

#! /soft/perl5/bin/perl
# (Achtung mein Perl-Pfad ist anders)
#
# ich hole mir die Daten nicht aus einer Kontrolldatei, sondern
# aus der DATA-Section des Scripts

while()
{
 if (m/IP address is/) # abgewiesen?
 {
 $\_ =~/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
 $lastfoundip = $1;
 }
}
print "IP-Adresse:\t$lastfoundip\n";

\_\_DATA\_\_
local IP address is 212.144.111.231, remote is 145.253.1.45

(die Zeilenbreite ist wirklich ein Problem, ich habe auch ein wenig abgeschnitten).

In dieser Variante funktionierts bei mir.

Gruß
bernhard