Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl-Sensitive Sunglasses

Re: Old Code reference wants new life as Object.

by revdiablo (Prior)
on Dec 08, 2006 at 17:26 UTC ( #588654=note: print w/replies, xml ) Need Help??

in reply to Old Code reference wants new life as Object.

Your question sounds somewhat interesting, but -- as the previous two replies indicate -- it is a bit vague. After reading it I am left with a few questions.

Do you want to:

  • Remove the dispatch table altogether, and replace it with something more "objecty"?
  • Leave the dispatch table there but access it through an object method call?

And do you need help:

  • Updating the calling code?
  • Updating the plugin code?

As you can see, there are many different directions this could go. Maybe one of the previous responses answered the question for you, but maybe not. Perhaps if you could clarify your question, we could be more certain.

  • Comment on Re: Old Code reference wants new life as Object.

Replies are listed 'Best First'.
Re^2: Old Code reference wants new life as Object.
by Devanchya (Beadle) on Dec 08, 2006 at 19:04 UTC
    Thanks for the responces... I am trying to maintain the depatch table at this time, as it is integrated into the main program preety heavly. If there is a better way to do it with out loosing the dynamic option, then that most likely would work. I considered using inheritance etc but it didn't work right for the option.

    Right now each of the existing plugin's have a load section which loads a code reference into a global dispatch hash:
    $dispatch{login} = \&login;
    $dispatch{slogin} = \&secure_login;
    The script then uses a value of a specific varible to determin what to do.
    $dispatch{default} = \&show_option_menu; #if nothing else we will show the menu

    $dispatch->{$dothis_now}->() # does the code ref.

    Now as you can tell, doing a code ref with \&login for example will work. It will not run the code when loaded into the hash, and waits nicely until it is wanted.

    $dispatch{self_test} = $self->login;

    Will execute the code before it is placed in the hash.

    I have not yet tested the other options given, but will as soon as I'm next to my development machine. But hopefully this clears it up a bit.

    It may be both the calling and the plugin code need to be 'fixed' to work properly.


    Even smart people are dumb in most things...

      In that case, the easiest thing to do is probably:

      $dispatch{self_test} = sub { $self->login };

      This will create an anonymous code reference that makes a closure on $self, so everything should be in place when the code actually gets called.

      Update: Er, which is exactly what ikegami responded with. I guess I should have re-read the original replies before posting.

Log In?

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

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2021-08-05 07:13 GMT
Find Nodes?
    Voting Booth?
    My primary motivation for participating at PerlMonks is: (Choices in context)

    Results (44 votes). Check out past polls.