http://qs1969.pair.com?node_id=11140008


in reply to Re: One-liner to join keys on a two-dimensionnal hash ?
in thread One-liner to join keys on a two-dimensionnal hash ?

OP here!
Thanks a lot for your help, I didn't know that map could be used such a way (i.e. having an output instead of altering every item in a list)..
Have a greet day!
  • Comment on Re^2: One-liner to join keys on a two-dimensionnal hash ?

Replies are listed 'Best First'.
Re^3: One-liner to join keys on a two-dimensionnal hash ?
by ikegami (Patriarch) on Dec 29, 2021 at 15:07 UTC

    That the point of map. It takes a list of inputs, and produces a different list from those inputs. It does so by applying the transformation function (the block or expression) to each input, and collecting the outputs of that function.

    Examples:

    my @uc = ( uc("abc"), uc("def") ); | v my @uc = map { uc($_) } "abc", "def";
    my %h = ( "abc" => 1, "def" => 1 ); | v my %h = map { $_ => 1 } "abc", "def";
Re^3: One-liner to join keys on a two-dimensionnal hash ?
by eyepopslikeamosquito (Archbishop) on Dec 29, 2021 at 23:20 UTC

    I didn't know that map could be used such a way (i.e. having an output instead of altering every item in a list)

    Erm, that is what map is for! :) Perl::Critic even provides a ProhibitVoidMap policy to warn you of code that uses map in void context.

    I suggest you follow the simple stylistic advice given in Effective Perl Programming in the item "Use foreach, map and grep as appropriate" namely:

    • Use foreach to iterate read-only over each element of a list
    • Use map to create a list based on the contents of another list
    • Use foreach to modify elements of a list
    • Use grep to select elements in a list