Within your custom select function you are trying to call the "real" select function. However, you are actually recursively calling your own custom select function. Prefix the call to the "real" select function with CORE:: to prevent this recursion.
use subs 'select'; sub select { my ($fh) = @_; warn "inside my custom select\n"; CORE::select $fh; } select STDERR; print "Hello to STDERR!\n"; select STDOUT;
Update: Meh; I see now that you want to do the above, but also provide another sub called select which is what will be available to outside code. This can be done with a little namespace::clean magic...
use v5.12; use warnings; package MyModule; # This is the override for the select built-in. # use subs 'select'; sub select { my ($fh) = @_; warn "inside my custom select\n"; CORE::select($fh); } # Here's the select function we're going to expose to outside # code. # require namespace::clean; namespace::clean->clean_subroutines(__PACKAGE__, 'select'); no strict 'refs'; *{'select'} = sub { # Note that we can use the select override even within # this sub!! select *STDERR; print "Hello to STDERR!\n"; select *STDOUT; }; 1;
In reply to Re: override CORE sub and keep method in same package
by tobyink
in thread override CORE sub and keep method in same package
by bulk88
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |