Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask

Re: change perl function in runtime

by grondilu (Friar)
on Dec 03, 2012 at 15:44 UTC ( #1006900=note: print w/replies, xml ) Need Help??

in reply to change perl function in runtime

EDIT: Please ignore this message, a good answer has been given above. You can alter the symbol table with *globs

The description does not really fit the title. In order to change a perl function in runtime, you would have to alter the symbol table. It can be done but it requires a lot of perl experience I think. Unless of course your function was defined as a reference to a function, in which case you can alter it as you would with any variable, which is trivial. Anyway I don't really see what you want to do.

It seems to me that what you really want is to just use 'eval':

package A; sub Y { die "aargh" } sub X { eval { Y }; if ($@) { print "humm... Y failed..." } { print "ok, no error here"; } }

Replies are listed 'Best First'.
Re^2: change perl function in runtime
by ColonelPanic (Friar) on Dec 03, 2012 at 15:47 UTC
    The title is fine; you have misunderstood the question. Take a look at Rolf's solution.

    When's the last time you used duct tape on a duct? --Larry Wall

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://1006900]
[marto]: Discipulus, what did you have in mind?
[marto]: sort of related, have you seen sonic pi
[Discipulus]: choroba less than perl -le ' $==1,(1 x $_)=~/(^)(1|11\1 )*(?{$=++})^/, print $= for 0..10'?? congrats
[Discipulus]: marto i had in mind something for stupid peoples with smart phones; a free app (this is the the non perl part..) and some hardware to sell in big cities
[marto]: use libPD on Android/IOS, route to something listening on the pi :P
[marto]: libpd
[marto]: OSC

How do I use this? | Other CB clients
Other Users?
Others meditating upon the Monastery: (7)
As of 2017-10-17 10:08 GMT
Find Nodes?
    Voting Booth?
    My fridge is mostly full of:

    Results (225 votes). Check out past polls.