У меня есть список значений смешанных типов (строки и числа):Динамически выбрать оператор равенства в Perl
my @list = (123, 'foo', 34.5, 'bar', '67baz');
Для каждого элемента в этом списке, мне нужно сравнить с входом в равной степени случайного типа (строка или число), чтобы сделать что-то:
my $input = 345;
foreach my $elem (@list) {
if ($input == $elem) {
# do something
} else {
# do something else
}
}
Сравнение (==
) будет работать нормально, когда оба операнда имеют одинаковый тип (цифры в данном случае), но поднимет предупреждение и/или производить неправильный результат, когда типы являются несоответствиями (для этого фрагмента кода это может быть s tring vs. number, или оба могут быть строками, поэтому вместо этого нужно использовать eq
).
Я хотел бы получить информацию о ваших предпочтительных способах решения этой проблемы сравнения. Или, может быть, есть модуль, который динамически выбирает (и выполняет) правильный тип сравнения, учитывая тип операндов.
Мне известны методы, такие как использование looks_like_number()
от Scalar::Util
, чтобы проверить, с какими значениями вы работаете, но подумал, что есть лучший подход, чтобы выяснить, как делать сравнения. Заранее спасибо.
Вам нужно '345' для соответствия' 345.0' и '3.45e2'? Если нет, вам нужно просто использовать 'eq' все время. – Borodin