use strictures; use Test::More; # plan test count here or use done_testing($count). is hello_world(), "Hello world!", "Hello world is hello world"; # Naive test, will not catch your bug, and you have one. cmp_ok get_number(), ">", 0, "get_number() returns greater than zero"; subtest "Iterate on get_number()" => sub { my $iterations = 10_000; # Higher confidence. my $ok; for ( 1 .. $iterations ) { $ok++ if get_number() > 0; } my $msg = "get_number() returns greater than zero"; $ok == $iterations ? pass($msg) : fail($msg . " - expected $iterations > 0, got $ok"); done_testing(1); }; done_testing(3); # <- Either "plan" or delcare test count here! exit 0; sub hello_world { "Hello world!"; } sub get_number { int(rand(1000)); }