#!/usr/bin/perl use strict; use warnings; use Data::Dumper; # Daten lesen ... my $str=join('',); my %data=(); # unsichere einfache Variante mit eval: if($str =~ m!\[\@Liste\](.+)\[/Liste\]!is) { my @queryColumns; my @queryData; eval($1); die("PARSE ERROR $@") if($@); for my $d (@queryData) { push(@{$data{$queryColumns[$_]}},$d->[$_]) for (0..$#$d); } } print Dumper(\%data); ######################################################################## %data=(); # sichere Variante über einen Parser: if($str =~ m!\[\@Liste\](.+)\[/Liste\]!is) { my @queryColumns; my @queryData; my $str=$1; if($str=~m!queryColumns\s*=\s*\(((?:\s*'[^']*',?\s*)+)\);!s) { @queryColumns=map{$_=~s/^\s*'//s; $_=~s/'\s*$//s; $_}split(/\s*,\s*/s,$1); } else { die("NO queryColumns Found!\n "); } if($str=~m!queryData\s*=\s*\((.+?)\);!s) { my $str=$1; while($str=~s/\n\s+\[((?:\s*'[^']*',?\s*)+)\n\s+\],?//s) { push(@queryData,[map{$_=~s/^\s*'//s; $_=~s/'\s*$//s; $_}split(/\s*,\s*/s,$1)]); } } else { die("NO queryData Found!\n "); } for my $d (@queryData) { push(@{$data{$queryColumns[$_]}},$d->[$_]) for (0..$#$d); } } print Dumper(\%data); ######################################################################## __DATA__ [@Liste] @queryColumns = ( 'objId', 'objName', 'objFullName', 'objDescription', 'objType', 'objStatus', 'objPerfStatus', ); @queryData = ( [ '1', '193.111.44.137', '193.111.44.137', '', 'Mgmt Station', 'Normal', 'Unknown', ], [ '2', '191.222.33.127', '191.222.33.127', '', 'Test 2', 'Normal', 'Unknown', ], [ '3', '176.193.1.7', '176.193.1.7', '', 'Test 3', 'Normal', 'Unknown', ], ); [/Liste]