Мне требовалось переписать мой же проект, написанный на Perl, с использованием <b>use strict</b>. Было лень объявлять все переменные вручную, т.к. их было чертовски много, посему я решил сей процесс автоматизировать. Это конечно не совсем правильно, однако я всё равно весь результат потом тщательно проанализировал.
Итак, предлагаю вашему вниманию мой метод автоматизации:1. Включаем в скрипте режим strict:
use strict;
2. Запускаем наш скрипт и фильтруем вывод ошибок на наличие "Global symbol", записывая в отдельный файл (например, var.txt):
perl -c script.pl 2>&1 | grep "Global symbol" > var.txt
3. Отсортируем дубликаты, оставив только первое вхождение переменной:
cat var.txt| sort -k 3| uniq -w 60| sort -nk 11| less4. Получившийся вариант анализируем мозгами и вставляем в код скрипта необходимые операторы "my".
Проверяем каждую переменную на необходимость дополнительного переопределения в локальных блоках и функциях.Настоятельная рекомендация: пишите скрипты на Perl сразу с использованием strict и warnings.
URL: http://truebsd.org/sokolov/463
Обсуждается: http://www.opennet.me/tips/info/2046.shtml
>пишите скрипты на Perl сразу с использованием strict и warnings.В Camelbook`е их отсутствие вообще названо ошибкой программиста.....
Если писать обёртку для С/С++ библиотеки, то весьма часто приходится часть strict'ов отключать из-за всяких хитростейтак что без no strict не обойтись.
Это да. Хорошо что мне, как админу, не надо такого делать....
vadiml, еще статьи и про qt 4.* будут?
если программа большая, то без use strict не обойтисьесли бы не было use strict, то на поиск глупых ошибок на было бы потратить несколько дней :)
Спасибо модератору за неплохую поправку.
Кстати, подправьте пожалуйста это ещё:>с использованием <b>use strict</b>.
вот объясните мне пожалуйста кому так сильно помешали косвенные ссылки чтобы отключать их в strict 'refs'?
no strict 'refs';
*{__PACKAGE__ . "::$sub"} = sub {
return $self->$sub(@_);
}