in reply to performance - loops, sub refs, symbol tables, and if/elses

Why not use OOP? Create base class architecture (too bad there are no java-like interfaces in perl). Inheret what you need and implement the rest. No more need for all this string parsing.. just execute on your data. All the function references will be taken care of.
  • Comment on Re: performance - loops, sub refs, symbol tables, and if/elses

Replies are listed 'Best First'.
Re: Re: performance - loops, sub refs, symbol tables, and if/elses
by jdporter (Paladin) on Dec 17, 2002 at 17:02 UTC
      I wouldn't categorise OO-Perl as all-caps-with-emphasis slow. In practical terms, it's just an extra argument to your functions, which just happen to be in a different namespace.

      Here's a simple benchmark that reveals a maybe 6-10% penalty for using OO without any optimizations.
      use warnings; use strict; use Benchmark qw[ cmpthese ]; package Banana; sub new { my $class = shift; return bless({ @_ }, $class); } sub peel { my ($self) = @_; my $x; foreach (keys %$self) { $x += $self->{$_}; } $x; } package main; sub peel { my ($banana) = @_; my $x; foreach (keys %$banana) { $x += $banana->{$_}; } $x; } cmpthese(10_000,{ oo_peel => sub { my $banana = Banana->new( foo => 10, bar => 1 +5); for (1..250) { $banana->peel(); } }, pr_peel => sub { my $banana = { foo => 10, bar => 15 }; for (1..250) { peel($banana); } }, });
      I've found that while using an object-oriented approach might be slow at the outset, having a good framework does make optimising easier.
        I wouldn't categorise OO-Perl as all-caps-with-emphasis slow.
        Well, I would, because it is. It is more than just an extra argument to your functions. It is (possibly inherited) method lookup. That's where the real performance hit comes from. If you have very simple classes, with no inheritance, the penalty is minimal, but it still exists.

        jdporter
        ...porque es dificil estar guapo y blanco.