Автоматизация объявления переменных в Perl при использовании strict |
[исправить] |
Мне требовалось переписать мой же проект, написанный на Perl, с использованием "use strict".
Было лень объявлять все переменные вручную, т.к. их было чертовски много,
посему я решил сей процесс
автоматизировать. Это конечно не совсем правильно, однако я всё равно весь
результат потом тщательно проанализировал.
Итак, предлагаю вашему вниманию мой метод автоматизации:
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| less
4. Получившийся вариант анализируем мозгами и вставляем в код скрипта необходимые операторы "my".
Проверяем каждую переменную на необходимость дополнительного переопределения в
локальных блоках и функциях.
Настоятельная рекомендация: пишите скрипты на Perl сразу с использованием strict и warnings.
|
|
|
|
Раздел: Корень / Программисту и web-разработчику / Perl / Переменные в Perl |
1.1, prapor (??), 12:37, 27/04/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
>пишите скрипты на Perl сразу с использованием strict и warnings.
В Camelbook'е их отсутствие вообще названо ошибкой программиста.....
| |
|
2.3, vadiml (?), 13:59, 27/04/2009 [^] [^^] [^^^] [ответить]
| +/– |
Если писать обёртку для С/С++ библиотеки, то весьма часто приходится часть strict'ов отключать из-за всяких хитростей
так что без no strict не обойтись.
| |
|
3.8, prapor (??), 17:01, 27/04/2009 [^] [^^] [^^^] [ответить]
| +/– |
Это да. Хорошо что мне, как админу, не надо такого делать....
| |
|
|
1.5, bibi (?), 15:45, 27/04/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
если программа большая, то без use strict не обойтись
если бы не было use strict, то на поиск глупых ошибок на было бы потратить несколько дней :)
| |
1.10, soko1 (??), 00:10, 28/04/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
Кстати, подправьте пожалуйста это ещё:
>с использованием <b>use strict</b>. | |
1.11, fredy (?), 04:46, 29/04/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
вот объясните мне пожалуйста кому так сильно помешали косвенные ссылки чтобы отключать их в strict 'refs'?
| |
1.12, bibi (?), 13:11, 01/05/2009 [ответить] [﹢﹢﹢] [ · · · ]
| +/– |
no strict 'refs';
*{__PACKAGE__ . "::$sub"} = sub {
return $self->$sub(@_);
}
| |
|