in reply to Re: map a list
in thread map a list

You can simplify your code a lot by making $res a package variable.
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;

Of course, the above is just an obfuscated way of doing

my @result = map { (/([a-z])$/ ? qq{$1=>fn($2)} : (/([a-z])=([a-z])$/ ? qq{$1=>$2} : (/([a-z])=\#([a-z])$/ ? qq{$1=>fn($2)} : q{???} ) ) ) } split m{,}, $str;

By no means do I consider the second snippet acceptable either.

By the way, why did you introduce limits on what the values can be? Nowhere did the OP imply the values would be single lowercase letters. If you remove that arbitrary limit, you can get rid of the "???" case.

Why did you also changed the output, returning a string where a pair of values should have been returned?