in reply to Why is my test failing?

eval { use Test::Perl::Critic (-profile => 't/perlcriticrc'); };

What gives? The eval should catch if Test::Perl::Critic is not installed right?

No. You are using eval BLOCK syntax, so the use statement is executed at compile time. To get this catched use eval STRING as in

eval "use Test::Perl::Critic (-profile => 't/perlcriticrc')";

-- Frank