use strict; use warnings; use Test::More; my @zero = (0, 0.0, -0, -0.0, 0E0); my @notzero = (1, -1, 1.1, -1.1, '', undef, 'foo', 'a string', 3, 4, \@zero); plan tests => @zero + @notzero; for my $scalar (@zero) { ok is_zero ($scalar), "$scalar is zero"; } for my $scalar (@notzero) { ok !is_zero ($scalar), ($scalar // 'undef') . ' is not zero'; } sub is_zero { my $scalar = shift; return defined ($scalar) && length ($scalar) && (!$scalar || $scalar eq '0E0'); }