Как я могу использовать «сказать» с Perl 5.8.8? - PullRequest
3 голосов
/ 24 ноября 2011

Мне назначен проект (PHP / MySQL), который нуждается в некотором пересмотре и, возможно, исправлениях. В рамках этого планируется проверить правильность всех переменных, которые мы получаем через GET и POST. У нас есть несколько файлов php и tpl, которые имеют несколько тысячи строк кода вместе, так что было бы больно искать все ссылки $ _GET [...] и $ _POST [...] вручную. Поэтому я попытался сделать это:

find . -name "*.php" -or -name "*.tpl" |
xargs perl -ne 'use feature say; say $1 while m/(\$_(GET|POST)\[[\s]*[\S]+[\s]*\])/g;' |
sort -u

По сути, он создает список всех ссылок $ _GET [...] и $ _POST [...] в проект, а затем удаляет повторные значения из него. Но это не сработало потому что у меня есть Perl 5.8.8 на моей машине разработки, которая не поддерживает 5.10+ функция «сказать», и наш системный администратор сказал, что обновление нежелательны. Я не уверен почему, но он босс.

Итак, есть ли способ заменить «скажем» другим кодом или, возможно, даже заменить Perl с другим инструментом?

Ответы [ 4 ]

13 голосов
/ 24 ноября 2011

Не забывайте, что очень легко эмулировать say:

sub say { print @_, "\n" }

Просто добавьте его в начало кода Perl и используйте как обычно.

10 голосов
/ 24 ноября 2011

В Perl 5.10 добавлено «say», которое заменяет «print», которое автоматически добавляет новую строку в вывод.Следовательно, вы можете написать «

say "hello";

... вместо того, чтобы писать:

print "hello\n";

Просто отбросьте« use function say »;и заменить «скажем $ 1» на:

print "$1\n";
6 голосов
/ 24 ноября 2011

Параметр -l без восьмеричного символа добавляет новую строку в конец операторов печати. От perlrun :

включает автоматическую обработку конца строки. У этого есть два отдельных эффекта. Во-первых, он автоматически разбивает $ / (разделитель входных записей), когда используется с -n или -p. Во-вторых, он присваивает $ \ (выходная запись разделитель) иметь значение octnum, чтобы любые операторы печати этот разделитель будет добавлен обратно. Если октнум опущен, устанавливает $ \ к текущему значению $ / .

Так ..

perl -lne ... print $1 ...

Заменит say.

3 голосов
/ 24 ноября 2011

Но это не сработало, потому что у меня на компьютере разработчика perl 5.8.8, который не поддерживает функцию 5.10+ 'say',

Perl 5.8.8 был выпущен31 января 2006 года. С тех пор мы видели 5.10, 5.10.1, 5.12, 5.12.1, 5.12.2, 5.12.3, 5.12.4, 5.14, 5.14.1, 5.14.2, ...и я могу быть устаревшимТри основных ревизии (5.10, 5.12, 5.14) с исправлениями, начиная с версии 5.8.8.Произошли циклы устаревания, и у вас не было возможности использовать их для очистки кода.

Простое решение - обновить.

, и наш системный администратор сказалэто обновление нежелательно.Я не уверен почему, но

И так?Не то чтобы он босс ...

он босс.

Ох.

Ну, я не тот, кто хорошоизвестен тем, что слушал боссов, когда они глупые или просто неверные.Опять же, я никогда не рекомендую делать то, что я делаю: -)

Если ваш начальник заинтересован в обновлении системного Perl, он прав.Это нежелательно.(Я предлагаю получить более новый дистрибутив, но если вы работаете в AIX, вы застряли, так как более новый AIX все еще поддерживает этот старый уровень Perl.) Но нет никаких причин, по которым вам нужно обновить системный Perl просто для обновления Perl.

Вы можете установить более одного Perl.Пока вы не трогаете / usr / bin / perl, и вы не должны это делать, так как это должно быть системным perl всегда, у вас все будет хорошо.Я установил perls 5.8.8, 5.10.1, 5.12.0, 5.12.1, 5.12.2, 5.14.0, 5.14.1 и 5.14.2 все в ~ / perl / $ версии, создал символические ссылки в ~ /bin для каждого из них (например, perl5.8.8 - это символическая ссылка на бинарный файл perl 5.8.8), и теперь я могу использовать development perls для их новых функций, но в то же время могу тестировать старые perl при необходимости,И, поскольку я устанавливаю в свой домашний каталог, мне не нужен доступ сисадмина.Если вы не используете Linux, вам понадобится компилятор.(Даже в Linux вам могут понадобиться установить некоторые пакеты разработки, например, в SLES нам часто нужно устанавливать RPM-разработки, чтобы получить дополнительные модули для компиляции.) Но это скорее нижняя планка для вашего системного администратора, чем перезапись системного perl (который он прав, чтобы предупредить).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...