in reply to Re^2: Can't call sub within same package in BEGIN block
in thread Can't call sub within same package in BEGIN block

Thanks, I am using the BEGIN block ... instead of creating another module

You don't need a BEGIN {} block to import/export or touch %ENV (icky like a code smell potentially almost), just simply make another module :) do stuff in import, it takes args

use Local::TouchEnvFirst; ## import use Local::TouchEnvSecond -optionFantastic; use Local::TouchEnvSecond -optionNotFantastic; no Local::TouchEnvFirst; ## unimport no Local::TouchEnvSecond -tooComplicated; use Local::Madness -init => sub { warn "if you gotta run me, go ahead :)"; };

Does the light bulb turn on? :)

What I still don't understand is why use subs lost this race. Say:

Same reason, it doesn't define the subroutine, its a forward declaration, its exactly like this literal code

sub TestMe; BEGIN { TestMe } sub TestMe { warn "oh no you didn't" } __END__ $ perl testme Undefined subroutine &main::TestMe called at testme line 2. BEGIN failed--compilation aborted at testme line 2.

 

rm -rf goners

Replies are listed 'Best First'.
Re^4: Can't call sub within same package in BEGIN block
by exilepanda (Friar) on Aug 14, 2014 at 08:32 UTC
    lol~~ I was actually grouping few modules into this one... but your explanation resolved my puzzle now. Well then.. I think I'll leave this little ugly defects for now, I can live with this though ^0^