Beefy Boxes and Bandwidth Generously Provided by pair Networks
Welcome to the Monastery
 
PerlMonks  

Re^3: Changing the name of a function in the call stack

by kikuchiyo (Friar)
on Nov 19, 2021 at 20:50 UTC ( #11138960=note: print w/replies, xml ) Need Help??


in reply to Re^2: Changing the name of a function in the call stack
in thread Changing the name of a function in the call stack

This is inferior to Sub::Name for two reasons:

  • you have to put the magic line inside the anon sub
  • all other anon subs down the call stack are renamed too, which is misleading
use strict; use warnings; use Carp; sub foo { my $bar = sub { carp "*** inner anon sub called***"; }; $bar->(); } sub generate { my ( $name ) = @_ ; return sub { local *__ANON__ = $name if $name; carp "***sub called***"; foo(); } } sub super { my $not_named = generate(); $not_named->(); my $named = generate('HulaHoop'); $named->(); } super();
Still, it's good to know that it's possible to do it in pure perl.

Replies are listed 'Best First'.
Re^4: Changing the name of a function in the call stack
by LanX (Sage) on Nov 19, 2021 at 20:56 UTC
    > This is inferior to Sub::Name for two reasons:

    well, I was aware of the side effects, but you said in the OP

    > create function wrappers,

    so I supposed you are going to automate the wrappers, hence all anon subs would be treated by your attribute handlers and you could de-localize the name before calling the wrapped sub.

    Anyway, I wouldn't be surprised if the mechanics of Sub::Name were possible without XS and just using methods from the B backend module

    Cheers Rolf
    (addicted to the Perl Programming Language :)
    Wikisyntax for the Monastery

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others rifling through the Monastery: (4)
As of 2022-08-15 13:07 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found

    Notices?