http://www.perlmonks.org?node_id=429122


in reply to Re: Infinitely Lazy
in thread Infinitely Lazy

Lazy evaluation isn't esoteric and unfamiliar. If you have ever written $foo = $ENV{"FOO"} || "foo"; then you have used it.

Ever seen this code before?

if(grep /needle/, @haystack) { print "found it! }

If @haystack is large and begins with "needle", then this code is searching the entire array even though it has enough information to stop after the first element. If grep were using lazy evaluation, then this code could go faster.

Update:

@matches = ( grep /$pattern/, @ReallyBigList )[ 0 .. $n ];

This code gets the first $n matches in the list, but Perl is not smart enough to know it is allowed to stop searching after it has enough matches. It will search down the entire list no matter what. Lazy evaluation would be nice here too.