#!/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.
4 Réponses :
Le moyen évident d'éviter qu'un avertissement concernant la comparaison d'un non numérique à un numérique est ne pas le faire em>! Les avertissements sont là pour votre avantage - ils ne devraient pas être ignorés, ni travaillés autour. P>
Pour répondre à quoi est le meilleur em> quel est de fournir plus de contexte - c'est-à-dire qu'est-ce que $ C code> représente et pourquoi est-il nécessaire de le comparer à
'd' code> ou
9 code> (et pourquoi ne pas utiliser
$ C EQ '9' 9 ' code>)? P>
Parce que si si $ C EQ "9" ou "9.0" ou "009"? Mieux utiliser le scalaire :: util 'look_like_number'; Comme Eugene a déclaré ci-dessus.
C'est ce que je lui ai demandé de clarifier!
{ no warnings 'numeric'; # your code }
fonctionne bien. Merci! Puisque je dois utiliser XMPP pour avoir débogué les avertissements permanents sont une très bonne raison de désactiver ce type pour le bien.
Je ne sais pas pourquoi vous voulez éviter l'avertissement. L'avertissement vous indique qu'il y a un problème potentiel dans votre programme. P>
Si vous allez comparer un numéro avec une chaîne contenant des données inconnues, vous allez devoir utiliser «EQ» pour la comparaison ou nettoyer les données de manière à ce que vous sachiez qu'il a l'air comme un nombre. p>
Vous avez raison en principal, mais la question est la suivante: comment désactiverait les messages. La différenciation des Perls entre la chaîne et les comparaisons numériques est gênante au mieux. Il ne semble pas que la comparaison soit effectuée via '==' ou «EQ» afin d'éteindre également l'avertissement. Dans mes yeux, la réponse d'Eugene Y est celle qui compte pour cette question.
Étant donné que cela n'a pas d'importance si la comparaison est effectuée via == ou EQ, la manière appropriée consiste à utiliser l'opérateur de comparaison de chaîne pour comparer les chaînes. Désactiver l'avertissement est comparativement plus de travail que d'utiliser simplement l'opérateur droit pour commencer; Sans oublier que toute la base de la question est l'opinion esquisse que "EQ" utilisait deux fois "n'a pas l'air bien". $ C code> est une chaîne, et il n'y a pas de calcul impliqué ici. Donc, traitez-le comme une corde, pour l'amour du ciel et simplement citer les neuf. :)
Utilisation d'une expression régulière pour voir si c'est un numéro:
if(($num=~/\d/) && ($num >= 0) && ($num < 10)) { # to do thing number }