Ah hah! This example clarifies my thinking a great deal. As I started this exercise writing a regression test, I kept having trouble inside ok() and is(). (This was using the Test2 suite, but here I will just use Test::Simple.)
#!/usr/bin/perl
use Test::Simple (tests => 9);
use strict;
use warnings;
my %hash;
&ok($^V eq "v5.32.1","Version = v5.32.1");
&ok(!%hash,"Empty: !\%hash");
&ok(!scalar(%hash), "Empty: ! scalar");
&ok(scalar(%hash) == 0, "Empty: 0 == scalar");
&ok(!keys(%hash), "Empty: ! keys");
++$hash{entry};
&ok((%hash ? 1 : 0),"Not empty: \%hash");
&ok(scalar(%hash), "Not empty: scalar");
&ok(scalar(%hash) != 0, "Not empty: scalar != 0");
&ok((keys(%hash) ? 1 : 0),"Not empty: keys");
This works in its entirety:
1..9
ok 1 - Version = v5.32.1
ok 2 - Empty: !%hash
ok 3 - Empty: ! scalar
ok 4 - Empty: 0 == scalar
ok 5 - Empty: ! keys
ok 6 - Not empty: %hash
ok 7 - Not empty: scalar
ok 8 - Not empty: scalar != 0
ok 9 - Not empty: keys
Thanks, all!