如何在Perl 5.8.8中使用'say'?

G. *_*nov 3 bash perl search file

我被分配到一个项目(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
Run Code Online (Sandbox Code Playgroud)

基本上它会在项目中创建所有$ _GET [...]和$ _POST [...]引用的列表,然后从中删除重复的值.但它没有用,因为我的开发机器上有per.8.8.8,它不支持5.10+功能'说',我们的系统管理员说升级是不受欢迎的.我不知道为什么,但他是老板.

那么,有没有办法用其他代码替换'say',或者甚至用另一个工具替换Perl?

Zai*_*aid 13

不要忘记它很容易模仿say:

sub say { print @_, "\n" }
Run Code Online (Sandbox Code Playgroud)

只需将其添加到Perl代码的开头并按常用方式使用即可.


JRF*_*son 10

Perl 5.10添加了'say',它可以替代'print',自动为输出添加换行符.因此你可以写"

say "hello";
Run Code Online (Sandbox Code Playgroud)

......而不是写:

print "hello\n";
Run Code Online (Sandbox Code Playgroud)

只需删除"使用功能说"; 并将'say $ 1'替换为:

print "$1\n";
Run Code Online (Sandbox Code Playgroud)


TLP*_*TLP 6

-l没有八进制的选项会在print语句的末尾添加换行符.来自perlrun:

启用自动行结束处理.它有两个独立的效果.首先,当与-n或-p一起使用时,它会自动选择$ /(输入记录分隔符).其次,它将$ \(输出记录分隔符)赋值为octnum,以便任何print语句都重新添加该分隔符.如果省略octnum,则将$ \设置为当前值$ /.

所以..

perl -lne ... print $1 ...
Run Code Online (Sandbox Code Playgroud)

将取代say.