Почему в первом примере не выводится предупреждение?
#!/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
При преобразовании числа из строки конечный пробел игнорируется, а символ новой строки считается пробелом, поэтому предупреждение не генерируется. Преобразование «9» также не генерирует предупреждение.
Потому что Perl думает, что это число:
use Scalar::Util 'looks_like_number'; for ("9\n", "6a") { say looks_like_number($_); } 1 0