On Wed, Mar 26, 2008 at 9:47 PM, Rob Dixon <[EMAIL PROTECTED]> wrote:
> Jay Savage wrote:
>  >
>  > If you want to see grep really shine, though, think about ways you
>  > might use it to avoid calling print for every element in the return
>  > list, e.g.
>  >
>  >     print join "\n", grep {$_ % 2 == 0} @list;
>
>  I think that's very misleading. Why should I want to avoid calling print
>  for each element? What you've written is the sort of thing for which
>  Perl gets a bad name - it's less readable and has no obvious benefits
>  over
>
>    print "$_\n" foreach grep { $_ % 2 == 0 } @list;
>

cmpthese(1000, {
    'foreach' => sub { print "$_\n" for grep {$_ % 2 == 0} 0..1000; },
    'join' => sub { print join "\n", grep {$_ % 2 == 0} 0..1000; },
});

        Rate foreach    join
foreach 40.7/s      --    -20%
join    50.8/s     25%      --

25% performance gain strikes me as a pretty obvious benefit. YMMV, of
course, depending on your data and memory performance, but in general,
function calls are expensive, and and print moreso than most, because
it requires a system call out to the OS. Calling a function like print
on each iteration through a loop is rarely the most efficient way to
do business.

This doesn't really have anything to do with Perl; it's true in any language.

Of course, efficiency, like beauty, is in the eye of the beholder. And
that's why I was clear with OP, that he should do whatever made the
most sense for him in his particular situation.

TIMTOWTDI isn't what gives Perl a bad name; it's what makes it the
wonderful, flexible tool that it is, and crates passionate groups of
users like this one.

>  (It also doesn't print a terminating "\n")
>

I think you'll agree there are several trivial fixes for this. 'print
"\n"' jumps immediately to mind.

Best,

-- jay
--------------------------------------------------
This email and attachment(s): [ ] blogable; [ x ] ask first; [ ]
private and confidential

daggerquill [at] gmail [dot] com
http://www.tuaw.com http://www.downloadsquad.com http://www.engatiki.org

values of β will give rise to dom!

Reply via email to