use strict; use warnings; use Fcntl qw(:DEFAULT :flock); # Das ist der Hash mit den Daten, die irgendwo generiert werden my $stats = {   ProcStats => {      Total  => 0,      New    => 0,      System => 0,      IOWait => 8.00,      User   => 0,      Idle   => 92.00,      Nice   => 0,   },   MemStats => {      Cached      => 531976,      SwapUsed    => 276600,      MemTotal    => 1035296,      SwapUsedPer => 26.09,      Buffers     => 188256,      MemUsed     => 981812,      SwapTotal   => 1060248,      MemFree     => 53484,      SwapFree    => 783648,      MemUsedPer  => 94.83,   },   TimeStamp => {      Time => '15:05:08',      Date => '2006-05-05',   }, }; # Das ist der Hash mit den Spaltenpositionen der einzelnen # Keys. Die Positionen werden aus einer Konfigurationsdatei # geladen... zum Test habe ich beide Hashs einfach mal so # hierhin geschrieben... my $defines = {   ProcStats => {      User   => 1,      Nice   => 2,      System => 3,      Idle   => 3,      IOWait => 4,      Total  => 5,      New    => 6,   },   MemStats => {      MemUsed     => 1,      MemFree     => 2,      MemUsedPer  => 3,      MemTotal    => 4,      Buffers     => 5,      Cached      => 6,      SwapUsed    => 7,      SwapFree    => 8,      SwapUsedPer => 9,      SwapTotal   => 10,   }, }; # Zunächst erzeuge ich das Datenverzeichnis... my $datadir = $stats->{TimeStamp}->{Date}; unless (-e $datadir) {   mkdir($datadir) or die $!; } # Nun durchlaufe ich den Datenhash und schreibe die Daten # Spaltenweise weg. foreach my $alias (keys %$stats) {   next if $alias eq 'TimeStamp';   my $file = "$datadir/$alias";   my $data = $stats->{$alias};   # ** und genau diese Stelle hier sagt mir überhaupt nicht zu...   my @tmp_arr = ($stats->{TimeStamp}->{Time});   $tmp_arr[$defines->{$alias}->{$_}] = $data->{$_} for keys %{$defines->{$alias}};   sysopen my $fh,$file,O_WRONLY | O_APPEND | O_CREAT,0644 or die $!;   flock($fh,LOCK_EX);   print $fh join ' ', @tmp_arr;   print $fh "\n";   close $fh; }