Perl:识别未知代码

时间:2014-06-18 08:51:13

标签: regex perl

我必须将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

2 个答案:

答案 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中引入////=运算符的一个原因。当然,如果当前代码在使用||时没有被破坏,请不要通过"修复"来引入新的错误。它。 ;)

正则表达式在perlreperlrequickperlretutperlop中进行了解释。

perlintroperlsynperldata中描述了真值和假值的构成。

答案 1 :(得分:2)

$customer ||= '';

相同
$customer = $customer || '';

if (!$customer) { $customer = ""; }