Beefy Boxes and Bandwidth Generously Provided by pair Networks
Perl: the Markov chain saw

Re^3: Right place to put common execute code in App::Cmd

by tobyink (Abbot)
on Dec 10, 2012 at 16:43 UTC ( #1008138=note: print w/replies, xml ) Need Help??

in reply to Re^2: Right place to put common execute code in App::Cmd
in thread Right place to put common execute code in App::Cmd

"I really hoped that there is another callback which I haven't found."

The relevant code is App::Cmd::execute_command. As you can see, nothing happens between validate_args and execute that you could possibly hook onto.

One alternative approach could be to subclass App::Cmd, overriding that method with your own implementation that adds extra hooks between validate_args and execute:

{ package My::App::Cmd; use base 'App::Cmd'; sub execute_command { my ($self, $cmd, $opt, @args) = @_; local our $active_cmd = $cmd; $cmd->validate_args($opt, \@args); $cmd->before_execute($opt, \@args); $cmd->execute($opt, \@args); } }

Then use My::App::Cmd instead of App::Cmd.

perl -E'sub Monkey::do{say$_,for@_,do{($monkey=[caller(0)]->[3])=~s{::}{ }and$monkey}}"Monkey say"->Monkey::do'

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1008138]
and all is quiet...

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (6)
As of 2018-06-20 19:27 GMT
Find Nodes?
    Voting Booth?
    Should cpanminus be part of the standard Perl release?

    Results (117 votes). Check out past polls.