Некоторое время я кладу глупости в мои модули. Там нет никакого вреда, и это маленькое пасхальное яйцо. uny2k полезно заканчивается "Yes, this code is a joke."
Class :: Fields переполнен ими.
Если сделать еще один шаг вперед, иногда, когда задокументирована функция, возвращающая true
и false
, я верну что-то, отличное от 1, для true
. Это наказать людей, которые пишут if foo() == 1
, когда они означают if foo()
. Это было примерно в то же время, когда я писал use constant TRUE => 1==1; use constant FALSE => !TRUE;
Я видел возвращаемое значение модуля, используемого в производственном коде. Я не помню точно, почему. Логика разработчика была ... замучена. Я считаю, что это было что-то вроде нежелания писать только одну строку вместо двух. Я не помню, почему он не просто экспортировал это.
Это был тот же разработчик, который использовал %_
для передачи аргументов (символ *_
является глобальным для пакетов ) и написал 150 операторов линейной карты внутри операторов map.
Опасность использования возвращаемого значения, кроме запутывания, состоит в том, что оно работает только один раз.
$ cat Foo.pm
package Foo;
return "Basset hounds got long ears";
$ cat test.plx
#!/usr/bin/perl -w
print require Foo, "\n";
print require Foo, "\n";
$ perl -I. test.plx
Basset hounds got long ears
1
Первый вызов require
оценивает Foo.pm и возвращает возвращаемое значение. Второй вызов видит его уже в %INC
и просто возвращает true. И вы даже не можете быть уверены, что первым делом требуется код. Вы можете обойти это с помощью do "Foo.pm"
, но теперь вы каждый раз перезагружаете модуль с предупреждениями о переопределенных подпрограммах, проблемах с производительностью и, возможно, повторной инициализации глобальных переменных. Это не стоит того.