bash$ plackup -e 'use warnings; INIT{ warn "foo"; }; sub { warn "here"; return [200, [], []] };' Too late to run INIT block at (eval 7) line 1. HTTP::Server::PSGI: Accepting connections at http://0:5000/ here at (eval 7) line 1. 127.0.0.1 - - [20/Nov/2014:14:18:08 +0200] "GET / HTTP/1.1" 200 - "-" "Mozilla/5.0 (X11; Ubuntu; Linux i686; rv:33.0) Gecko/20100101 Firefox/33.0" #### use Init::Queue sub { get_dbh(); load_file(); build_cache(); }; # postpone till explicitly called #### Init::Queue->startup(); # this executes all startup blocks, # in order of appearance