push @employees_my_try, ( map { if( my($idx, $rest) = $_ =~ m/^employee\[(.*?)\] = new employee_element\((.*)\);$/ ) { my @split = map { s/\A"(.*)"\z/$1/; $_ } split( /,/, $rest ); [ $idx, @split ] } else { () } } split "\n", $data ); print Dumper \@employees_my_try;