... only one element will be the output of map.

Not so. As given in the OPed code, map will output a value for each input value it receives. If there is a match,  $1 is returned. If the match fails, the value of the last expression evaluated, the regex itself, will be the output, and this output will be  '' (the empty string, i.e., false) because the match failed. See example below in which the entire output of map is captured and displayed. The print version may have seemed to work because print will by default (depends on value of $, – see perlvar) separate printed items with an empty string, and any empty strings from map will be collapsed to nothing.

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

A variation using map could be made to work as I think you want as follows:

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

Update: HOWEVER: A solution using map may not be the most efficient. map will always process the entire array, but you seem to want to capture only the first match; this can easily be done with a for-loop that would also allow you to terminate matching after the first match.

Update: In the second example above,  $first will always be defined except if there was no matching string in the  @GET_STRING array — but in that case, I think one could argue that  $first should be undefined!

Update: All those 'nine's should really have been 'nein' == German 'no'.     (blush)


In reply to Re: Assign result of map to scalar variable by AnomalousMonk
in thread Assign result of map to scalar variable by ram31

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.