http://qs321.pair.com?node_id=1204056


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

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/...

Okay... So does the equivalent static dispatch table.

use strict; use warnings; ;; sub hiya { print 'hi from ', (caller(1))[3]; } ;; sub _x_foo { hiya; }; sub _x_bar { hiya; }; ;; my %disp = ( foo => \&_x_foo, bar => \&_x_bar, zot => \&_x_zot, ); dd \%disp; ;; $disp{foo}->(); $disp{zot}->(); $disp{bar}->();

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...

This is true for all Perl code though. There's a gajillion ways to write a script that "compiles" with strictures enabled but fails at runtime. This is why we write tests (unit, functional, etc).