Beefy Boxes and Bandwidth Generously Provided by pair Networks
Do you know where your variables are?

Re(2): Replacing namespaces

by dmmiller2k (Chaplain)
on Dec 11, 2001 at 20:25 UTC ( #130962=note: print w/replies, xml ) Need Help??

in reply to Re: Replacing namespaces
in thread Replacing namespaces

Rather than hardcoding the fallback into the class itself, why not implement a dispatcher object, which, given the current class (available through caller()) and the kind of failure (?) does a lookup to determine the next class to try, to wit:

my %FSM = ( First => { fail_a => 'Second', fail_b => 'Third', pass => undef }, # we're done Second =>{ fail_c => 'Third', pass => undef ) );

Rather like a sparse-matrix.

Then the code within any of the classes 'First', "Second' or 'Third' would merely consult the %FSM hash for what to do next. This brings up the problem of how (where?) to scope the %FSM hash. This should probably be a member within a common base-class:

package Base; sub new { my $class = shift; my $self = { FSM => {First => { fail_a => 'Second', fail_b => 'Third', pass => undef }, # we're done Second =>{ fail_c => 'Third', pass => undef )} }; bless $self, $class; return $self; } package First; use base qw( Base ); sub new { # ... } package Second; use base qw( Base ); sub new { # ... } # ... and so on

Any of the derived classes could access it as $self->{FSM}.


You can give a man a fish and feed him for a day ...
Or, you can
teach him to fish and feed him for a lifetime

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://130962]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others imbibing at the Monastery: (6)
As of 2021-05-14 19:52 GMT
Find Nodes?
    Voting Booth?
    Perl 7 will be out ...

    Results (150 votes). Check out past polls.