Das Problem liegt in der foreach-Schleife und in der Art, die Variable $OptIDStatus zu setzen, denn sie wird in jedem Durchgang gesetzt, und damit ist ja wohl klar, daß sie letztendlich das enthalten wird, was im letzten Durchgang beim Vergleich herauskommt. Dadurch erweckt es den Anschein, als würde die ersten Zeilen gar nicht beachtet werden.
Es ist also ein logisches Problem, kein Problem der Programmiersprache, bei PHP würde da genau das selbe passieren.
Probier's mal so:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
print &CheckTempDB('temp.var',1,'bla@laber.de]bla@laber.de','3216548958');
sub CheckTempDB {
my ($datei,$flock,$linkmail,$linkid) = @_;
open (DATEI,$datei) || die 'Unable to open the templist file for reading';
flock (DATEI,2) if $flock;
chomp (my @zeilen = <DATEI>);
close (DATEI);
foreach my $zeile (@zeilen) {
my ($mail,$id) = split(/\|/,$zeile);
return 'ok' if ($mail eq $linkmail) && ($id eq $linkid);
}
return 'error';
}
(Ich mag keine Variablen in Groß- und Kleinschreibung! ;))