package foo; use strict; use warnings; require Exporter; our @ISA = 'Exporter'; our @EXPORT = 'bar'; print "module foo loaded here \n"; sub bar{ print "module foo, sub bar executed here\n"; } 1; #### #!/usr/bin/perl use strict; use warnings; print "main I \n"; # sub called from module bar(); # begin blocks are loaded at compile time # the first BEGIN block will be the first thing to execute BEGIN { # turn on autoflush so you will see print results immediately $| = 1; # plain text header to simplify the print statements for this demo print "content-type: text/plain\n\n"; print "begin block 1 \n"; } print "main II \n"; # modules are also loaded at compile time # consider them to behave like BEGIN blocks use foo; print "main III \n"; BEGIN { print "begin block 2 \n"; }