in reply to Re^2: Subclassing a class that uses an internal dispatch table
in thread Subclassing a class that uses an internal dispatch table

We already have one. It's called the Perl dispatcher.
# Sanitize $cmd here if you want. Maybe you go against a list of a +cceptable # commands that's accessible via $self->add_command( 'cmd1' ); my $method = $self->can( $cmd ); $self->$method( @args ) if $method;
Is there something I'm missing? This is very similar to what SQL::Parser does and it's pretty successful.

My criteria for good software:
  1. Does it work?
  2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

Replies are listed 'Best First'.
Re^4: Subclassing a class that uses an internal dispatch table
by BrowserUk (Patriarch) on Oct 30, 2007 at 21:16 UTC
      Nope. Think of it as a hash lookup that is a huge set of hashes looked at in the proper order.

      My criteria for good software:
      1. Does it work?
      2. Can someone else come in, make a change, and be reasonably certain no bugs were introduced?

        Hm. That could be said about any code that relies upon the use of symbolic references. Perl's symbol tables are hashes, and using a symbolic reference is simply looking up the 'name' in a one of those hashes.

        But still, the primary argument against using symbolic references hold true. If someone sends you a correctly formed cmd message that contains a cmd that coincides with a method name that is not a part of the interface, that private method could be invoked by a third party.

        I appreciate that you suggested in your comments that received command could be sanatised against a list of those that are a legitimate part of the interface, but the same could be done for any symbolic reference usage.

        I guess it just reenforces the idea that best practices and even cardinal rules are just guidlines who's purpose should be to suggest caution, not to prohibit absolutely.

        Upshot: I agree with you that this would be a far better way of implementing this requirement.


        Examine what is said, not who speaks -- Silence betokens consent -- Love the truth but pardon error.
        "Science is about questioning the status quo. Questioning authority".
        In the absence of evidence, opinion is indistinguishable from prejudice.