in reply to Re^3: Easy dispatch tables. (still easier)
in thread Easy dispatch tables.

Do you really think those 3 counter-examples are really easier to read than the 2-line examples using Dispatch.pm?

I could mutter stuff about abstraction and orthagonality, but I'm not sure if you'd buy into it. How about another reason: that it makes the concept of dispatch tables easier to create and be less prone to error. Your approaches all take either a high level of perl knowledge, or are simply not as easy to use, or are bulky. Sure, this module doesn't do anything spectacular, and sure, its pretty easy to write equivalant code. However, this module was designed to help abstract and de-couple code, which it does a good job at. So, I'll have to disagree with your opinion that Dispatch.pm is useless. I enjoy using it, at least.

Replies are listed 'Best First'.
Re^5: Easy dispatch tables. (can() be even easier)
by Aristotle (Chancellor) on Apr 03, 2003 at 08:25 UTC

    I agree the second and third are more opaque than your snippets, but that's because there's no function that hides the guts - you could define a Foo::_callables() and then it wouldn't look any more intimidating than your examples (of course that's 90% of what you do, anyway).

    But really, if I need to call a series of functions, I'd put them in a hash or array. And I really think the UNIVERSAL::can example is the simplest solution for that case.

    Which, silly me, can of course be written

    Foo->$bar($baz) if Foo->can($bar);
    and then I think there's really no debate anymore over whether that's simple.

    Makeshifts last the longest.

      I agree, that's pretty simple. However, you still don't have all of the advantages of working with a hash, such as keys, values, and tie. And sure, you could define your own function do to that, but why would you want to if there is a module that does it for you? You don't write your own CGI parsing routines, do you?
        True, but that's why I gave my last two examples.

        Makeshifts last the longest.