У меня есть этот код, и я получаю предупреждение: Argument "" isn't numeric in numeric eq (==)
для $id == $_
Аргумент «» не является числовым значением в числовом уравнении (==)
@delete имеет номера данные с веб-формы (запрос CGI), и, вероятно, именно поэтому perl обрабатывает эти числа как строки. Он работает нормально, но я не знаю, что делать с предупреждениями.
my @IDs = (21, 36, 6, 7, 64, 6435, 24);
for my $id (@IDs) {
push @insert, $id if (grep $id == $_, @delete)
}
Я не хочу предупреждений. Каков мой лучший вариант?
Я сначала подумал об итерации по массиву и вызвал int
для каждого элемента, но мне не понравилась идея.
Какой метод лучше? '@delete = grep!/^ $ /, @delete;' Или '@delete = grep! $ _, @delete;' Хорошее объяснение. Убрал много сомнений. – GrSrv
Спасибо. Ну, '!/^ $ /' И '! $ _' Делают в этом случае противоположность друг другу. Пустая строка является ложным значением, поэтому ее отрицание делает ее правдой.Однако выполнение true/false также опасно, поскольку оно может создавать ложные негативы (если нуль '0' является допустимым значением) и ложные срабатывания (например, буквы или пробелы). Если вы получаете свои значения из веб-формы, вы должны сначала проверить их сначала. В этом случае первое безопаснее, так как оно делает только одно: проверьте, пуста ли строка. – TLP