J'ai ce code, et j'obtenir l'avertissement: Argument "" isn't numeric in numeric eq (==)
pour $id == $_
Argument « » est pas numérique dans l'équation numérique (==)
@delete a des numéros provenant d'un formulaire web (demande de CGI), et c'est probablement la raison pour laquelle perl traite ces nombres comme des chaînes. Cela fonctionne bien, mais je ne sais pas quoi faire à propos des avertissements.
my @IDs = (21, 36, 6, 7, 64, 6435, 24);
for my $id (@IDs) {
push @insert, $id if (grep $id == $_, @delete)
}
Je ne veux pas les avertissements. Quelle est ma meilleure option?
J'ai d'abord pensé à l'itération sur la matrice et en appelant int
pour chaque élément, mais je n'ai pas aimé l'idée.
Quelle est la meilleure méthode? '@delete = grep!/^ $ /, @delete;' Ou '@delete = grep! $ _, @delete;' Bonne explication. Effacé beaucoup de doutes. – GrSrv
Merci. Eh bien, '!/^ $ /' Et '! $ _' Font l'opposé l'un de l'autre dans ce cas. La chaîne vide est une valeur fausse, donc la nier la rend vraie.Cependant, faire un vrai/faux est également dangereux, car il peut créer des faux négatifs (si zéro '0' est une valeur valide), et des faux positifs (par exemple des lettres ou des espaces). Si vous obtenez vos valeurs à partir d'un formulaire Web, vous devez probablement les vérifier en premier. Dans ce cas, le premier est plus sûr, car il ne fait qu'une chose: vérifier si la chaîne est vide. – TLP