LanX has asked for the wisdom of the Perl Monks concerning the following question:
while developing a module I like to run (F5) the testsuite automatically. I'm using a moulino approach which works considerably well
#BEGIN { # TODO unless ( caller() ) { # Modulino for development exec q(cd ../..; prove ./t/); #run proove from dist root } #}
It occurred to me that I have to enclose this inside a BEGIN block to avoid the overhead and side-effects of loding all modules with use (this happens in the BEGIN phase) before the unless is executed at run time.
This doesn't work, since caller() IS defined inside BEGIN
BEGIN { warn "Caller Begin: ",defined caller(0) } warn "Caller Normal: ",defined caller();
Caller Begin: 1 at /home/lanx/... Caller Normal: at /home/lanx/...
while writing this I realized that BEGIN is called 2 levels down, hence caller(2) seems to work
BEGIN { # TODO unless ( caller(2) ) { # Modulino for development exec q(cd ../..; prove ./t/); #run proove from dist root } }
Is this reliable?
(I think it is, but I already wrote this post, before finding the solution and the monastery is not overwhelmed with writeups :)
Cheers Rolf
(addicted to the Perl Programming Language :)
see Wikisyntax for the Monastery
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re: Running modulino inside BEGIN
by hv (Prior) on Apr 14, 2024 at 19:51 UTC | |
by LanX (Saint) on Apr 14, 2024 at 21:11 UTC | |
|
Re: Running modulino inside BEGIN
by NERDVANA (Priest) on Apr 14, 2024 at 19:59 UTC | |
by LanX (Saint) on Apr 14, 2024 at 21:08 UTC | |
|
Re: Running modulino inside BEGIN
by ikegami (Patriarch) on Apr 15, 2024 at 13:28 UTC |