I don' t know where it falls in skill or teaching target but I strongly prefer the done_testing($n) idiom. The main reason is it lends itself to flexibility and a bit of intention documentation in growing/maintaining tests, for example cases like this–
my %tests = ( case1 => { input => …, output => … },
case2 => { … } );
subtest "Something" => sub {
plan skip_all => "Moon is not full" unless …;
ok 1;
ok 2;
done_testing(2);
};
for my $test ( values %tests )
{
ok $test->{input}, "Have input…";
is process($test->{input}), $test->{output}, "Process works";
}
done_testing( 1 + 2 * keys %tests );