warn "About to call\n"; mysub(1); warn "Called\n"; BEGIN { package Foo; require Exporter; @ISA = qw(Exporter); @EXPORT = qw(mysub); sub mysub ($) { warn "mysub: @_\n" }; } BEGIN { warn("About to import\n"); Foo->import(); warn("Imported\n"); } CHECK { warn "Done compiling.\n" } INIT { warn "Running.\n" } __END__ About to import Imported main::mysub() called too early to check prototype at tmp.pl line 4. Done compiling. Running. About to call mysub: 1 Called