posted by
damerell at 08:51pm on 01/04/2009
Dear Lazyweb,
I'm writing a Perl program which I intend to have a curses interface. I've already written such a program, so that's not a problem.
However, this time it would be nice not to tie myself to _just_ curses, but to have the option of supporting other interfaces (SDL graphics tiles? libtcod?)
So what I want to do is to find out early on which interface the program is going to use (command-line option, config file, whatever) and then do something like loading an interface-specific module which contains a bunch of subroutines the main program can use, which have the same names regardless of the interface.
I suspect there is an existing idiom for this but I can't even think how to Google it. The approach that springs to mind is to "if (this) {require and import one module} elsif (that) {require and import another module}" and so forth but I really have no idea if that's sensible.
Any advice?
I'm writing a Perl program which I intend to have a curses interface. I've already written such a program, so that's not a problem.
However, this time it would be nice not to tie myself to _just_ curses, but to have the option of supporting other interfaces (SDL graphics tiles? libtcod?)
So what I want to do is to find out early on which interface the program is going to use (command-line option, config file, whatever) and then do something like loading an interface-specific module which contains a bunch of subroutines the main program can use, which have the same names regardless of the interface.
I suspect there is an existing idiom for this but I can't even think how to Google it. The approach that springs to mind is to "if (this) {require and import one module} elsif (that) {require and import another module}" and so forth but I really have no idea if that's sensible.
Any advice?
(no subject)
(no subject)
(no subject)
(no subject)
eval { require Mail::Box::Manager; }; die "You need to install the Mail::Box module, exiting" if $!;You could even, if you were a meanie (or awesome), replace the "die" with something like "CPAN::Shell->install("Your::Module::Here");". I can't see that causing any problems whatsoever. 8)
I think what I'd do, were I doing something like this, would be to create a config file (or a flag) that specifies an interface and then switch off of that somewhere early-on. In the block for each interface, require() the appropriate module (and die if it's not there, and maybe even fail gracefully to the bare minimum interface) and then include another file with the function definitions for that type of interface. That's not very OO of me, I guess, but OO is for jerks and stuff.
There are probably cleaner ways to do it...
(no subject)
(no subject)
(no subject)
(no subject)
(no subject)