Аргумент не числовой - вопрос - PullRequest
2 голосов
/ 09 марта 2011

Почему в первом примере не выводится предупреждение?

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

my $c = "9\n";
say $c * 2;

my $d = "6a";
say $d * 2;

# 18
# Argument "6a" isn't numeric in multiplication (*) at ./perl8.pl line 9.
# 12

Ответы [ 2 ]

12 голосов
/ 09 марта 2011

При преобразовании числа из строки конечный пробел игнорируется, а символ новой строки считается пробелом, поэтому предупреждение не генерируется. Преобразование «9» также не генерирует предупреждение.

1 голос
/ 09 марта 2011

Потому что Perl думает, что это число:

use Scalar::Util 'looks_like_number';

for ("9\n", "6a") {
    say looks_like_number($_);
}

1
0
...