my @result = map { local our $res; m {(?x) ^ (?(?=([a-z])$) (?{ $res = qq{$1=>fn($1)}; }) | (?(?=([a-z])=([a-z])$) (?{ $res = qq{$2=>$3}; }) | (?(?=([a-z])=\#([a-z])$) (?{ $res = qq{$4=>fn($5)}; }) | (?{ $res = q{???}; }) ) ) ) }; $res } split m{,}, $str;