+27  A: 

Read Higher-Order Perl. You can buy it or download for free. It provides insights even to experienced Perl programmers.

musiKk
Thank you. An upvote was simply not enough. :)
Bart J
+4  A: 

Functional programming is just programming, you can do it in any language. If you like how the Haskell API is laid out, you might like my Data::Monad module, which provides Moose roles for various Haskell typeclasses including Monad. (Unlike Haskell, though, there is no "fail" in my Monad, and all Monads are Functors.)

Here's an example of exercising the various typeclasses in the context of a data structure that handles success or failure (like Control.Monad.Error):

http://github.com/jrockway/data-monad/blob/master/t/error.t

Note that it has the ability to convert usual Perl computations that can fail with an exception to a pure procedure that you can bind to other procedures. This lets "regular Perl" work inside a program designed to have a more functional control flow.

jrockway
Regarding "you can do it in any language", I disagree. Well... you CAN do it in any language but you WONT if it's harder/longer to code. At some point, syntax matters. This blog post http://enfranchisedmind.com/blog/posts/scala-not-functional/ makes this clear. However, I don't know how Perl deals with this.
gawi
Yes, Haskell and OCaml have a syntax-less function application operator. That is not what makes programming in Haskell "functional programming", though.
jrockway
+2  A: 

perl6 is still a work in progress, so even though perl6 has much improved support for functional programming at the language level (see perlgeek.de on currying in perl6, for example), you'll probably want to start now with perl5 so you can get to work with what's out there. i recommend looking into cpan for higher-level library support...Array::Utils and others (there's a lot!)

brad clawsie