You could use alarm and a signal handler.
#!/usr/bin/perl
#
use strict;
use warnings;
use Data::Dumper;
$SIG{ALRM} = sub {
print "printing from within sub routine\n";
alarm(1);
};
alarm(1);
while(1) {
print "main loop proceeding\n";
sleep(1);
}
produces:
main loop proceeding
printing from within sub routine
main loop proceeding
printing from within sub routine
main loop proceeding
printing from within sub routine
main loop proceeding
printing from within sub routine
main loop proceeding
printing from within sub routine
main loop proceeding
Note: you don't need the sleep in the main loop. You will, no doubt, have better things to do.