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
In reply to Running modulino inside BEGIN by LanX
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |