$ cat Foo.pm use warnings; CHECK { print "in check\n" } INIT { print "in init\n" } 1; $ perl -e'require Foo' Too late to run CHECK block at Foo.pm line 2. Too late to run INIT block at Foo.pm line 3. $ perl -e'use diagnostics; require Foo' Too late to run CHECK block at Foo.pm line 2 (#1) (W void) A CHECK or INIT block is being defined during run time proper, when the opportunity to run them has already passed. Perhaps you are loading a file with require or do when you should be using use instead. Or perhaps you should put the require or do inside a BEGIN block. Too late to run INIT block at Foo.pm line 3 (#1)