in reply to map sub to list?

Don't use function prototypes unless you know how and, more importantly, why. This is not needed here and is the main cause of your problem.

Replies are listed 'Best First'.
Re^2: map sub to list?
by pldanutz (Acolyte) on Sep 09, 2013 at 17:14 UTC
    I've tried removing the prototype, of course; but actually the main cause of the problem was relying on an argument as opposed to $_, right? I prefer functional style as much as possible, coming from a Lisp background and all that :)

      Yes. Assuming you want to keep the overkill of a function, you could either change the relevant line to:

      sub f{ return $_ + 1 };

      or pass the $_ as an argument to the function:

      use strict; use warnings; sub f{ return $_[0] + 1 }; my @a = (1, 2, 3); print join " ", map (f($_), @a);

      I have added the join because you like functional programming. But the more common way to do such things is illustrated in the following Perl one-liner:

      $ perl -e 'print join " ", map {$_ + 1} 1..4' 2 3 4 5

      Talking of functional programming, note that the block of code after the map (the {$_ + 1} part) can be regarded as an anonymous function being applied by map onto each input element.

        Cool. The actual code I had was more complex and warranted a function. I posted a simplified snippet as is customary in such venues :) A problem I have with the no-parens style is that I can't tell how associativity works (between print, join, map in your case)