in reply to Using map to Add a Line Breaks to a List

The direct fix:

print map { /(.+)\./ && "$1\n" } sort RetrieveIllustrationList( $cl_us +erinput );

The subtle fix (my recommendation):

print map { /(.+)\./, "\n" } sort RetrieveIllustrationList( $cl_userin +put );

Doing a lot of extra work with a dash of join:

print join "\n", map( /(.+)\./, sort RetrieveIllustrationList( $cl_use +rinput ) ), '';

Letting print do the work with an implicit version of the subtle fix (probably the most efficient, but caveat microoptimizer):

local $, = "\n"; print map( /(.+)\./, sort RetrieveIllustrationList( $cl_userinput ) ), + '';

Suboptimal variations with a double loop:

print map "$_\n", map /(.+)\./, sort RetrieveIllustrationList( $cl_use +rinput ); print "$_\n" for map /(.+)\./, sort RetrieveIllustrationList( $cl_user +input );

I think that's enough for tonight.

Makeshifts last the longest.

Replies are listed 'Best First'.
Re^2: Using map to Add a Line Breaks to a List
by goober99 (Scribe) on Mar 05, 2005 at 06:07 UTC
    I like your recommended subtle fix. I like the elegant perlishness about it. I think I may edit my code to use it.

    I don't understand how it works though. Can someone explain?

      As !1 explained: a successful pattern match in list context returns a list of captured matches, or an empty list if it didn't match. That's why your own map { /(.+)\./ } works — map provides list context to the block, so the pattern match returns the captured text. What I did is simply unconditionally add a "\n" to that list. So if the list was

      "foo.txt", "bar.bmp", "baz.pdf"

      then the result is

      "foo", "\n", "bar", "\n", "baz", "\n"

      which prompts print to duly produce the desired result.

      Makeshifts last the longest.

      It's due to the capturing regex in list context. This returns a list of captured strings. Map then passes this list and the "\n" to print. Since $, = $\ = "", your output works the way it does. Of course, this will print blank lines if your filename doesn't contain a period.

        As will several other solutions. Good catch.

        Makeshifts last the longest.