#!/usr/bin/perl use strict; use warnings; use 5.012; use Phases; my $main_closure = bless {name => 'main_closure'}, 'Phases'; sub closure { say $main_closure; } my $external = bless {name => 'external'}, 'Phases'; END { say 'Main END' } say 'Main Last line'; #### package Phases; use 5.012; BEGIN { say 'Phases BEGIN' } UNITCHECK { say 'Phases UNITCHECK' } CHECK { say 'Phases CHECK' } INIT { say 'Phases INIT' } END { say 'Phases END' } my $my = bless {name => 'my'}, __PACKAGE__; my $closure = bless {name => 'closure'}, __PACKAGE__; our $our = bless {name => 'our'}, __PACKAGE__; sub closure { print $closure; } sub DESTROY { my $self = shift or say 'Nothing passed to DESTROY' and return; my $name = $self->{name} || ''; say "Phases DESTROY $name" } 1; #### Phases BEGIN Phases UNITCHECK Phases DESTROY my Phases CHECK Phases INIT Main Last line Phases DESTROY external Main END Phases END Phases DESTROY closure Phases DESTROY our Phases DESTROY main_closure