Ed X: Script funktioniert nur local (Versionskonflikt?)

Beitrag lesen

Hi an alle,

Eine subroutine in einem script soll folgendes leisten:

aus einer csv-datei der Art:

name|mailaddress|mobile|phone|rubrik|pw
Schnuffil|schnuffel@schnuffel.de|0169-55555555|030-12345678|design|sChN
Stoffel|stoff@stoff.de|0169-9876543|080-4444444|design, pr|STsT
Pumuckel|pumucke@mst.eder.de|555-1234567|0555-2468135|design|roteHaare
naechster|naechster@next.de|0555-0000000|000-0000000|Prod|letzter

soll in einen zweidimensionalen Hash geparst werden. Also isoliere ich erst die erste Zeile, und ermittle die keywords:

Opens the membersdb-file

open(MEMBERS,"<$membersfile") || &exit_on_error("$membersfile cannot be opened!");
 my @readmembers = <MEMBERS>;
 close(MEMBERS);
 # entferne erste Zeile und ermittel die schluesselworte
 @keynames = split /|/, shift(@readmembers);
 # der letzte key hat einen Zeilenumbruch hintendran, aber nicht mehr lange....
 chomp $keynames[-1];

Das funktioniert on- wie offline :-).

Als nächstes iteriere ich über @readmembers (alle Zeilen) und innerhalb jeder iteration nochmal über jeden neuen Array und orden die werte den keywords zu:

erzeugung eines 2dimensionalen hashes

foreach $readmember (@readmembers)
  {
  # jede Zeile hat einen Zeilenumbruch hintendran, kann ich nicht brauchen....
  chomp($readmember);
  # parse die zeilen in temporaeres array
  my @member_line = split /|/, $readmember;
  # ordne jeden wert einem key zu
  for($i=0; $i<=$#member_line; $i++)
   {
   $members{$member_line[0]}{$keynames[$i]} = $member_line[$i];
   }
  }

Offline geht das alles, aber online wird der letzte wert (hier "pw") nicht an den Array angehängt. Also eine Iteration über @keywords zeigt an, das es dort "pw" gibt. Aber im großen Hash gibt es das nicht!

Woran könnte das liegen?

Bye Ed X
PS: Die Subroutine im ganzen:
sub parse_members {
 # Opens the membersdb-file
 open(MEMBERS,"<$membersfile") || &exit_on_error("Systemfailure or missing cofiguration:<br>There is no database file for the members or it cannot be opened!");
 my @readmembers = <MEMBERS>;
 close(MEMBERS);
 # entferne erste Zeile und ermittel die schluesselworte
 @keynames = split /|/, shift(@readmembers);
 # der letzte key hat einen Zeilenumbruch hintendran, aber nicht mehr lange....
 chomp $keynames[-1];
 # erzeugung eines 2dimensionalen hashes
 foreach $readmember (@readmembers)
  {
  # jede Zeile hat einen Zeilenumbruch hintendran, kann ich nicht brauchen....
  chomp($readmember);
  # parse die zeilen in temporaeres array
  my @member_line = split /|/, $readmember;
  # ordne jeden wert einem key zu
  for($i=0; $i<=$#member_line; $i++)
   {
   $members{$member_line[0]}{$keynames[$i]} = $member_line[$i];
   }
  }
}