Вообще говоря, неправильный ввод приводит к undef
(если не исключение), что (в конечном итоге) приводит к предупреждению, так что ошибка может быть найдена.
Самым спорным предупреждением является неинициализированное предупреждениепотому что нет немедленной выгоды.Но когда кто-то считает его частью более обширной структуры ошибок, он понимает, что это ключевой компонент системы обнаружения и отладки ошибок Perl.Наличие функций, возвращающих undef при неправильном вводе, является еще одним компонентом этой системы.
Я оспариваю ваше утверждение, что это делает код меньше.Для начала, никогда не следует использовать reftype
, поскольку это нарушает модель данных Perl.(Вот почему keys $ref
всегда была плохой идеей и никогда не выходила за рамки экспериментальной стадии.) Это означает, что объем рассматриваемого кода довольно мал.
Тем не менее, может иметь смысл создавать данные, которыетребует его использования, если гарантированы определенные ограничения.(Например, вывод decode_json
может потребовать его использования, и его можно безопасно использовать, потому что decode_json
никогда не будет генерировать объекты или магические переменные.) Когда это необходимо, обычно выполняется ряд проверок, поэтому возвращаетсяпустая строка на самом деле не помогает.
my $type = reftype($val);
if (!defined($type)) { ... }
elsif ($type eq 'HASH') { ... }
elsif ($type eq 'ARRAY') { ... }
...
Обратите внимание, что изменение reftype
нарушит этот код, поэтому изменение reftype
не вариант.Я собирался сказать, что вы могли бы попросить у автора альтернативный сабвуфер, который ведет себя так, как вы хотите, но вы могли бы так же легко создать этот саб сам.