#!/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!";
}
什么是最好的方法,避免'参数'f“在./perl.pl第7行的数字公式(==)中不是数字。' - 警告?
我想在这种情况下,我可以使用“eq”两次,但这看起来不太好。
答案 0 :(得分:24)
use Scalar::Util 'looks_like_number';
if ( $c eq 'd' || ( looks_like_number($c) && $c == 9 ) ) {
say "Hello, world!";
}
您也可以暂时禁用此类警告:
{
no warnings 'numeric';
# your code
}
答案 1 :(得分:17)
不确定为什么要避免警告。警告告诉您程序中存在潜在问题。
如果您要将数字与包含未知数据的字符串进行比较,那么您将不得不使用“eq”进行比较或以某种方式清理数据,以便您了解它的外观像一个数字。
答案 2 :(得分:4)
避免将非数字与数字进行比较的明显方法是不要这样做!警告是为了您的利益 - 不应忽视或解决它们。
要回答您需要提供更多上下文的最佳方式 - 即$c
代表什么,以及为什么有必要比较它'd'
或{ {1}}(为什么不使用9
)?
答案 3 :(得分:0)
使用正则表达式查看是否为数字:
if(($num=~/\d/) && ($num >= 0) && ($num < 10))
{
# to do thing number
}