好的,所以有一个输入表单,有4个文本框。我使用CGI.pm获取输入:
my $exc0 = param('exclude0') || 'a';
my $exc1 = param('exclude1') || 'a';
my $exc2 = param('exclude2') || 'a';
my $exc3 = param('exclude3') || 'a';
我必须包含|| 'a'
的原因是,如果没有输入,则允许它工作。有没有更安全的方法来做到这一点?
稍后会在正则表达式中调用它:
next if ($totalmatch->[2] =~ /\b$exc0\b/i);
next if ($totalmatch->[2] =~ /\b$exc1\b/i);
next if ($totalmatch->[2] =~ /\b$exc2\b/i);
next if ($totalmatch->[2] =~ /\b$exc3\b/i);
$totalmatch->[2]
是一个句子。如果我没有检查没有输入,当没有输入时没有匹配(a.k.a.它包括$exc
在每种情况下)。我猜这是因为每个句子都有一个undef或空格?
我尝试过的是|| ''
,我想我可以使用if ($exc0)
或if defined()
或eq ''
,但只是寻求帮助。
非常感谢你的时间。
答案 0 :(得分:3)
如果您没有执行use warnings
但未执行|| 'a'
,则应收到警告:Use of uninitialized value at ...
在perl(或任何语言)中最好的做法是在函数中使用它之前检查变量是否存在,或者在这种情况下是正则表达式,除非有特定的原因是无效的。
你应该真的摆脱|| 'a'
并做到这一点:
next if (length($exc0) and $totalmatch->[2] =~ /\b$exc0\b/i);
next if (length($exc1) and $totalmatch->[2] =~ /\b$exc1\b/i);
next if (length($exc2) and $totalmatch->[2] =~ /\b$exc2\b/i);
next if (length($exc3) and $totalmatch->[2] =~ /\b$exc3\b/i);
您不希望在此使用defined()
,因为''
已定义,您仍然会遇到匹配问题。