Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

Re^2: Creating dispatch table with variable in function name

by Mr. Muskrat (Canon)
on Nov 21, 2017 at 22:38 UTC ( #1203962=note: print w/replies, xml ) Need Help??


in reply to Re: Creating dispatch table with variable in function name
in thread Creating dispatch table with variable in function name

It's a simple hash with references to the subroutines so no, this doesn't tamper with the symbol tables.

  • Comment on Re^2: Creating dispatch table with variable in function name

Replies are listed 'Best First'.
Re^3: Creating dispatch table with variable in function name
by Laurent_R (Canon) on Nov 22, 2017 at 08:45 UTC
    No, it's not a simple dispatch table with code refs in it, I certainly would not have any objections to that. What I am possibly worrying about is that the subroutine ref names are dynamically created.

      Personal preference I guess. I see nothing wrong with this. It's far safer than AUTOLOAD, for example, you have to still have to write code for each piece (to create the dispatch table, the subroutines and the look ups).

        Per Laurent_R: "... I am ... worrying ... that the subroutine ref names are dynamically created."
        Per Mr. Muskrat: "Personal preference ... I see nothing wrong ... you have to still have to write code for each piece ..."

        What worries me is that, while strict is perfectly happy with it, the code below has a run-time error that may not be triggered for hours/days/weeks/months/...

        c:\@Work\Perl\monks>perl -MData::Dump -le "use warnings; use strict; ;; sub hiya { print 'hi from ', (caller(1))[3]; } ;; sub _x_foo { hiya; }; sub _x_bar { hiya; }; ;; my %disp = map { $_ => \&{ '_x_' . $_ } } qw(foo bar zot); dd \%disp; ;; $disp{foo}->(); $disp{zot}->(); $disp{bar}->(); " { bar => sub { "???" }, foo => sub { "???" }, zot => sub { "???" } } hi from main::_x_foo Undefined subroutine &main::_x_zot called at -e line 1.
        You have to write code for each piece in order for the whole thing to work reliably, but you may not discover that it doesn't until a very inopportune moment. If everything could be thoroughly tested prior to deployment, the queasy feeling in my stomach might be eased a bit, but even so...


        Give a man a fish:  <%-{-{-{-<

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1203962]
help
Chatterbox?
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others avoiding work at the Monastery: (5)
As of 2018-07-19 17:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?
    It has been suggested to rename Perl 6 in order to boost its marketing potential. Which name would you prefer?















    Results (414 votes). Check out past polls.

    Notices?