Ich hoffe auch hier kann man mich verstehen?
Zunächst, Ich weiss nicht, wie sinnvoll es ist, ein File in einen Array zu speichern.
Weiter gilt: split() ist langsam bei perl. Ich bevorzuge eine RE.
  
my @data;  
while(<FILEHANDLE>){  
  my %temp = ();          # Wir brauchen einen neuen hash  
  #ich bearbeite jetzt jede Zeile = Record  
  # Die folgende RE hat eine Backreferenz \1 auf $1  
  while($_ =~ s#\[([^\[\]]+?)\](.*?)\[/\1\]##g ){  
    $temp{$1} = $2 || '';  
  }  
  # an dieser Stelle kannst jetzt mit $temp arbeiten  
  # ...  
  # oder wenn du es in einem Array wirklich speichern musst ???  
  # wir speichern die Referenz des Hashes im Array  
  push( @data, \%temp);  
}
nochmals die RE etwas deutlicher
  
s#\[  
    ([^\[\]]+?)  
  \]  
    (.*?)  
  \[  
    /\1  
  \]##gx  
mfg Beat
 nicht angemeldet
 nicht angemeldet