Best way to avoid "isn't numeric in numeric eq (==)"-warning

#!/usr/bin/env perl
use warnings;
use 5.12.2;

my $c = 'f'; # could be a number too

if ( $c eq 'd' || $c == 9 ) {
    say "Hello, world!";
} 

What is the best way, to avoid the 'Argument "f" isn't numeric in numeric eq (==) at ./perl.pl line 7.'-warning? I suppose in this case I could use "eq" two times, but that doesn't look good.

Answers


Not sure why you want to avoid the warning. The warning is telling you that there's a potential problem in your program.

If you're going to compare a number with a string that contains unknown data, then you're either going to have to use 'eq' for the comparison or clean up the data in some way so that you know it looks like a number.


use Scalar::Util 'looks_like_number';    

if ( $c eq 'd' || ( looks_like_number($c) && $c == 9 ) ) {
    say "Hello, world!";
} 

You could also disable this category of warnings temporarily:

{
    no warnings 'numeric';
    # your code
}

The obvious way to avoid a warning about comparing a non-numeric to a numeric is not to do it! Warnings are there for your benefit - they should not be ignored, or worked around.

To answer what is the best way you need to provide more context - i.e. what does $c represent, and why is it necessary to compare it do 'd' or 9 (and why not use $c eq '9')?


Using a regular expression to see if that is a number:

if(($num=~/\d/) && ($num >= 0) && ($num < 10))
{
    # to do thing number 
}

Need Your Help

How to know if a UITextField in iOS has blank spaces

iphone ios ipad nsstring uitextfield

I have a UITextField where user can enter a name and save it. But, user should not be allowed to enter blank spaces in the textFiled.