in reply to dealing with RUNTIME, COMPILE TIME and use lib ...

This is what BEGIN and CHECK are intended to handle. To keep your code clear I'd suggest requiring your main program. If you want more control than require allows, look at the require doc's--they give implementation code. Partitioning the code like this is not necessary, but the nature of the problem (interactive and controlled by third party) suggest a conservative approach.

Be well,
rir

#!/usr/bin/perl use strict; use warnings; BEGIN { print "Begin code$/Get initialization info from user$/"; }
Update: Added next line, which was rather the point of partitioning the code.
print "Or do initialization here before the require$/"; require Program; END { print "End program$/"; }
Progam.plpm
package Program; BEGIN: { print "Begin module$/initialize$/" } print "Runtime$/"; END: { print "End module$/" } 1;