The following module was proposed for inclusion in the Module List:
modid: Getopt::CallingName
DSLIP: idpfp
description: Script function delegation based on name
userid: SRSHAH (Sagar R. Shah)
chapterid: 12 (Opt_Arg_Param_Proc)
communities:
[EMAIL PROTECTED] (under the thread Script::Delegate)
similar:
None known.
rationale:
Sometimes you can have a script that can run in two or more 'modes'
of operation. Apart from an option to specify the mode, the command
line options are the same/very similar. Much of the code used by the
various modes is common.
As an application user interface decision, it may be more
useful/helpful to be able to call the script by two or more names -
i.e. one for each mode. This cuts out the command line option for
specifying the mode.
In some cases it might be appropriate just to move all the code, or
at least all the common code, into a module and have separate
wrapper perl scripts. The problem with this approach is either you
end up duplicating command line option handling in each of the
wrapper scripts or you end up moving the command line option
handling into a module also. The former case introduces maintenance
burden [or perhaps an excuse to use TT2 to generate your wrappers
;-)]. The latter case can feel like a distortion/displacement of the
code.
Getopt::CallingName provides another alternative. The idea is that
you create symbolic links to your actual script (which you might
want to give a generic name). Each symbolic link corresponds to the
name/mode with which you call the script. Within your script, after
any common setup/options handling you call script delegate to call
the appropriate script function for the mode.
The exact features of Getopt::CallingName still have to be decided.
The most basic feature would be to accept a hash of regex =>
subrefs, evaluating $PROGRAM_NAME against the regexs. Failure could
be handled either via a default function, or perhaps a fatal error,
or perhaps throwing an Exception (Error.pm) for the script to deal
with. The delegate method itself would return the return value of
the subroutine that it delegated to. Slightly more advanced
functionality could include inspecting the stash for a method
corresponding to the $PROGRAM_NAME (perhaps also allow the script
author to specify a prefix so that scripts tv_play and tv_record
could be implemented by methods play() and record()).
enteredby: SRSHAH (Sagar R. Shah)
enteredon: Sat Jun 7 12:52:00 2003 GMT
The resulting entry would be:
Getopt::
::CallingName idpfp Script function delegation based on name SRSHAH
Thanks for registering,
--
The PAUSE
PS: The following links are only valid for module list maintainers:
Registration form with editing capabilities:
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=10500000_e9c4252b0a082f91&SUBMIT_pause99_add_mod_preview=1
Immediate (one click) registration:
https://pause.perl.org/pause/authenquery?ACTION=add_mod&USERID=10500000_e9c4252b0a082f91&SUBMIT_pause99_add_mod_insertit=1