1
2
3
4
5
6
7
8
9
10
11
12
13
14
open(FILEMANAGER, "<coresys/incoming.csv") or die "ERROR: Unable to open the IC-file during read-access!";
flock(FILEMANAGER, LOCK_EX);
my $DeltaMinuten = "";
while(! eof(FILEMANAGER)){
my $zeile = <FILEMANAGER>;
my ($DB_customstorycode, $DB_headline, $DB_benutzergeschichte, $DB_zaehler, $DB_internetpost, $DB_tbgelesen, $DB_IPAdresse, $DB_Monatstag, $DB_Monat, $DB_Jahr, $DB_Stunden, $DB_Minuten, $DB_Sekunden, $DB_clientdatakey) = split(/;/,$zeile);
$DeltaMinuten = ($Minuten - $DB_Minuten);
if ($DB_IPAdresse eq $IPAdresse and $DB_Monatstag eq $Monatstag and $DB_Monat eq $Monat and $DB_Jahr eq $Jahr and $DB_Stunden eq $Stunden and $DeltaMinuten < 5) {
close(FILEMANAGER);
goto TimeLock;
}
close(FILEMANAGER);
}
2012-06-26T19:48:34 ?Den Skalar $DeltaMinuten musste ich aus der while-Klammer auslagern. Sonst kann ich wo anders im Code nicht darauf zugreifen. Scheinbar macht Perl einen Unterschied, ob die Variable - pardon - Skalar, in einer geschweiften Klammer definiert wird, oder nicht. Das nur am Rande.
2012-06-26T19:48:34 ?Dieser Code funktioniert in einem anderen Programm - nur eben mit push. Das kann doch nicht sein, das man "pushen" muss um jede Zeile einzeln zu bekommen?
1 2 3 4 5 6 7 8 9 10
my $foo = 'Hallo'; # 1. block: $foo aendern { $foo .= ' Welt.'; } # 2. block: neues $foo im Block; { my $foo = 'Adieu'; print "2. $foo.\n"; } # "aeusseres" $foo kontrollieren print "X. $foo\n";
2012-06-26T20:43:09 LinuxerWenn Du auf den Wert eines Skalar außerhalb der While-Schleife zugreifen willst, dann musst Du den Skalar eben ausserhalb der Schleife deklarieren; und zwar mindestens in dem Bereich, in dem Du darauf zugreifen willst. Mit $DeltaMinuten hast Du das doch schon getan...
1
2
3
while(! eof(FILEMANAGER)){
my $zeile = <FILEMANAGER>;
my ($DB_customstorycode, $DB_headline, $DB_benutzergeschichte, $DB_zaehler, $DB_internetpost, $DB_tbgelesen, $DB_IPAdresse, $DB_Monatstag, $DB_Monat, $DB_Jahr, $DB_Stunden, $DB_Minuten, $DB_Sekunden, $DB_clientdatakey) = split(/;/,$zeile);
1 2 3 4 5 6 7 8
my $outer_scope = 0; while ( my $line = <$handle> ) { my ( $foo, $bar, $fuzz, $bazz ) = split /;/, $line; $outer_scope = $bar; } # beachte, nach Ablauf der while-Schleife hat $outer_scope # den Wert von $bar der letzten gelesenen Zeile
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#################################################
# Multi-Post-Blocker (MPB) / Mehrfachpostsperre #
#################################################
open(FILEMANAGER, "<coresys/incoming.csv") or die "ERROR: Unable to open the IC-file during read-access!";
flock(FILEMANAGER, LOCK_EX);
my $DeltaMinuten = "";
my $GlobalDB_Minuten = "";
while(! eof(FILEMANAGER)){
my $zeile = <FILEMANAGER>;
my ($DB_customstorycode, $DB_headline, $DB_benutzergeschichte, $DB_zaehler, $DB_internetpost, $DB_tbgelesen, $DB_IPAdresse, $DB_Monatstag, $DB_Monat, $DB_Jahr, $DB_Stunden, $DB_Minuten, $DB_Sekunden, $DB_clientdatakey) = split(/;/,$zeile);
$GlobalDB_Minuten = $DB_Minuten;
$DeltaMinuten = ($Minuten - $DB_Minuten);
if ($DB_IPAdresse eq $IPAdresse and $DB_Monatstag eq $Monatstag and $DB_Monat eq $Monat and $DB_Jahr eq $Jahr and $DB_Stunden eq $Stunden and $DeltaMinuten < 5) {
close(FILEMANAGER);
goto TimeLock;
}
}
close(FILEMANAGER);
2012-06-26T21:44:03 ?... daß mit dem Einschleusen eines übergeordneten Skalars war echt "tricky".
2012-06-26T21:44:03 ?Code: (dl )open(FILEMANAGER, "<coresys/incoming.csv") or die "ERROR: Unable to open the IC-file during read-access!";