in reply to Assign result of map to scalar variable

# ok # print map { $1 if /^\*\s\(?([^\)]+)\)?/} @GET_STRING;

You just need parentheses around the LHS to force list context:

my ($val) = map { /^\*\s\(?([^\)]+)\)?/ ? $1 : () } @GET_STRING;

Replies are listed 'Best First'.
Re^2: Assign result of map to scalar variable
by AnomalousMonk (Archbishop) on Jul 18, 2013 at 20:00 UTC
    You just need parentheses around the LHS to force list context...

    (Note: In the code originally replied to, the map block statement was  $1 if /^\*\s\(?([^\)]+)\)?/)   (tag – you're it)

    But that would only work if the first item in  @GET_STRING matched the regex. (I'm assuming this array may contain any number of matching or non-matching strings in any order.) If it did not, an empty string would be assigned to the scalar. See first example below.

    Update: Also:

    >perl -wMstrict -le "my @GET_STRING = ('no', '*nine', '*(not)', '* yes', '* (yup)', '* ya)'); ;; my ($first) = map { $1 if / ^ \* \s \(? ([^\)]+) \)? /x } @GET_STRING; print qq{'$first'}; " ''