Ключик -w использую в основном в однострочниках.
Но, как оказалось, о нем забывать не стоит!
Вот реальная история.
При разработке системы, использующих подгруздку модулей, в одном из таких модулей была сделана ошибка. По какой-то причине кто-то поставил двоеточие после слова package, подобно вот этому:
> cat Foo.pm
package: Foo;
use strict;
use warnings;
# ...
1;
Однако, при загрузке этого модуля никаких предупреждений не выводится:
> perl -c -MFoo -e 1
-e syntax OK
Хотя перед загрузкой включены и strict, и warnings:
> perl -c -Mstrict -Mwarnings -MFoo -e 1
-e syntax OK
Все дело в том, что в файле Foo.pm прагма warnings подключается после объявления модуля.
Если в подключать прагму до объявления модуля, то ошибка легко диагностируется:
> cat Foo.pm
use strict;
use warnings;
package: Foo;
# ...
1;
> perl -c -MFoo -e 1
Bareword "Foo" not allowed while "strict subs" in use at Foo.pm line 4.
Compilation failed in require.
BEGIN failed--compilation aborted.
Но писать так как-то не очень привычно и не хочется, да и где гарантия, что другой разработчик будут также писать так?
Вот тут и приходит на помощь ключик -w:
> perl -wc -MFoo -e 1
Useless use of a constant in void context at Foo.pm line 1.
-e syntax OK
Хотя файл Foo.pm и загружен, но предупреждение позволяет легко понять, что имеется ошибка.
Так что ключик -w рано выкидывать на свалку истории, как это можно подумать из perldoc perllexwarn.
Копия: http://kiev.pm.org/node/235
Комментариев нет:
Отправить комментарий