Java Mailing List Archive

http://www.apache-httpd.com/

Home » modperl.perl »

Re: How to debug bizarre memory corruption in mod_perl

Frank Wiles

2008-07-09

Replies: Find Java Web Hosting

Author LoginPost Reply
On Wed, 9 Jul 2008 13:23:13 +0100
Andy Armstrong <andy@(protected):

> On 9 Jul 2008, at 09:09, David Kaufman wrote:
> > # from the POD doco at
> > #
> > http://search.cpan.org/~gbarr/Scalar-List-Utils-1.19/lib/List/Util.pm#DESCRIPTION
> >
> > $foo = first { defined($_) } @list; # first defined value in @list
> >
> >
> > Who needs to install a CPAN module to do that? I personally would
> > have
> > written it as:
> >
> > $foo = (grep defined, @list)[0]; # first defined value in @list
>
>
> Bear in mind that first may be much more efficient if the list is
> large and/or the test is expensive

Agree on the efficiency. I worked with a company on a large
mod_perl application (300K+ lines of code) that used a particular
function VERY often, that took an array and returned all the
unique values.

It did this with the common Perl Cookbook way of putting everything
into a hash and returning the keys(). I switched that function
to using List::MoreUtils::uniq() and they saw almost a 10% speed
improvement to their entire application. Granted this was a special
case because of how often that particular function was used (which
was a bad design decision in the first place), but sometimes
using these types of modules is useful/necessary even if the
normal "Perl core" way of doing it is relatively simple.

For example, if we use the technique above vs first() you get:

100 items in the list:
          Rate Grep first
   Grep  85470/s   -- -74%
   first 331126/s 287%   --

5000 items in the list:
          Rate Grep first
   Grep   1743/s   -- -99%
   first 125000/s 7073%   --

So even for relatively small lists it can be a huge performance
win.

-------------------------------------------------------
 Frank Wiles, Revolution Systems, LLC.
  Personal : frank@(protected)
  Work   : frank@(protected)

©2008 apache-httpd.com - Jax Systems, LLC, U.S.A.