in reply to Re^2: Importing constans and variables when "require"ing
in thread Importing constans and variables when "require"ing

This subject is complicated. Please review the many answers to your previous post Copy a builtin sub to a different name and then override.
Bill
  • Comment on Re^3: Importing constans and variables when "require"ing

Replies are listed 'Best First'.
Re^4: Importing constans and variables when "require"ing
by bliako (Abbot) on Feb 22, 2019 at 23:37 UTC

    You are right, that previous post has many gem answers. I am just not absolutely sure that they can work in ALL situations where modules load other modules etc. My conclusion was

    you must override/alias your sleep() BEFORE use statements for any modules which will use it
    and right now /with this post I am trying to make sure that the "BEFORE" is ensured 100%.

    The most bullet-proof way I guessed it was to override at compile time and then require all modules which happens at runtime, BEFORE is ensured 100%. However, that reveals side-effects. So I have to write tests for my specific case to ensure that BEFORE ... Thanks (and for your replies in the previous post).

Re^4: Importing constans and variables when "require"ing
by bliako (Abbot) on Feb 22, 2019 at 23:55 UTC

    For the record that works and should work as long as it is use'd before any modules whose their sleep needs to be overriden (from LanX's answer at Copy a builtin sub to a different name and then override):

    package Override::Sleep; # based on LanX's answer at https://perlmonks.org/?node_id=1215668 our $total_sleep_time = 0; our $DEBUG = 0; BEGIN { my $oldsleep = \&CORE::sleep; *CORE::GLOBAL::sleep = sub(;$) { #$Override::Sleep::total_sleep_time += CORE::sleep($_[0]); $Override::Sleep::total_sleep_time += $oldsleep->($_[0]); if( $Override::Sleep::DEBUG ){ my $parent = ( caller(1) )[3] || "N/A"; print 'CORE::GLOBAL::sleep('.$_[0].") (called by $parent): + total sleep time is now ".$Override::Sleep::total_sleep_time." secon +ds.\n"; } }; } 1;