package Module::MagicInit; use strict; my @init_queue; sub register_init { push @init_queue, [ (caller(1))[2], @_ ]; }; sub init { for my $task (@init_queue) { my( $package, $callback, @args )= @$task; $callback->( @args ) or die "Init failed for $package."; }; };