use B qw( svref_2object SVf_IOK SVf_NOK SVf_POK ); sub is_zero { my $sv = svref_2object(my $ref = \$_[0]); my $flags = $sv->FLAGS; return $sv->IVX == 0 if $flags & SVf_IOK; return $sv->NVX == 0 if $flags & SVf_NOK; return $sv->PV eq "0" if $flags & SVf_POK; return 0; }