Программисту понадобилось сравнить два массива (массивы считаем равными, если они содержат одинаковые элементы в одинаковом порядке). Для этого программист решил сконкатенировать элементы каждого массива через разделительный символ и сравнить полученные строки.
Если отбросить несущественные детали, код получился такой:
(можно скачать файл)
И что же вы думаете печатает такая программа?
К сожалению, программа печатает
@array1 not eq @array2
и не выдает никаких предупреждений,
даже если включить прагмы strict
и
warnings
.
perldoc perlop
Дело в приоритете операций. Вычисление происходите не так:
, а так:
А это, конечно, совсем не то, что имел в виду программист.
Стоило бы по крайней мере добавить скобки в условие, чтобы обеспечить правильный
порядок вычисления.
А может быть, реализовать другую фунцию для сравнения массивов.
Или использовать модуль Data::Compare.
Или комбинацию any
и pairwise
из
List::MoreUtils.
Из наших читателей первый и самый полный ответ прислал Anatoliy nuclon@