我必须将perl脚本包含到我的工作的Web系统中,但是原作者不再在这里,办公室中没有其他人知道perl。
我今天早上才第一次处理perl,而且我试图弄清楚可能有人可能提供帮助的几行
1] $customer = $q->param('account') || '';
2] $customer =~ s/[^\d]//g;
3] $customer ||= '';
4] if( $customer and ( $customer =~ /^10\d{5}$/ or $customer eq '1' ) ) {
5] $no_error = 1;
6] }
我发现第2行删除了所有非数字值,但我不确定该语句实际上是如何起作用的。?
同样,我不确定=~ /^10\d{5}$/
的含义
第3行是我无法弄清楚的主要因素,我习惯使用||
来表示逻辑OR
。
答案 0 :(得分:3)
1)如果参数是Perl认为" true"的值,则接受该参数,否则为空字符串。
2)正则表达式替换,消除$ customer中的任何非数字。
3)如果$customer
是"假" Perl值,将其设置为空字符串。
4)如果$customer
是真的'值,以及以10开头的7位数字或字符串,' 1' ...
5)将$no_error
设置为数值1。
6)关闭一个区块。
在||
perlop中解释了||=
和perldoc
运算符。在某些情况下,他们是一个潜伏的错误,因为" 0"可能是参数的合法值,但会触发'或'子句,这是在Perl 5.10中引入//
和//=
运算符的一个原因。当然,如果当前代码在使用||
时没有被破坏,请不要通过"修复"来引入新的错误。它。 ;)
正则表达式在perlre,perlrequick,perlretut和perlop中进行了解释。
答案 1 :(得分:2)
$customer ||= '';
与
相同$customer = $customer || '';
或
if (!$customer) { $customer = ""; }