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)
-l没有八进制的选项会在print语句的末尾添加换行符.来自perlrun:
启用自动行结束处理.它有两个独立的效果.首先,当与-n或-p一起使用时,它会自动选择$ /(输入记录分隔符).其次,它将$ \(输出记录分隔符)赋值为octnum,以便任何print语句都重新添加该分隔符.如果省略octnum,则将$ \设置为当前值$ /.
所以..
perl -lne ... print $1 ...
Run Code Online (Sandbox Code Playgroud)
将取代say.