package Mogstored::ChildProcess; use strict; sub run { my $class = shift; die "run not implemented for $class\n"; } sub pre_exec_init { my $class = shift; # override to setup environment ... } sub exec { my $class = shift; if (_running_under_par()) { # then we can't exec, as we'll lose magic @INC # ghetto: #for (3..100) { POSIX::close($_); } my $rv = eval "use $class; 1" or die "Failed to load $class: $@\n"; $class->run; } else { exec $^X, "-M$class", "-e", "$class->run;"; } die "$class run loop ended!\n"; } sub _running_under_par { # not the best test in the world, but works. return (grep { ref $_ eq "CODE" } @INC) ? 1 : 0; } 1;