Perl:当=〜没有时,为什么eq会工作?

时间:2011-06-09 15:06:59

标签: perl

工作代码:

if ( $check1 eq $search_key ...

以前的“错误”代码:

if ( $check1 =~ /$search_key/ ...

单词($check1$search_key)应该是相同的,但为什么第二个单词不会一直返回true?这些有什么不同?

$check1是通过拆分获得的。 $search_key要么在(“word”)之前输入,要么在运行时输入:<>),然后都传递给子程序。

另一个问题是,我可以在没有任何隐藏问题的情况下转换以下内容吗?

if ($category_id eq "subj") {

我希望能够说:=~ /subj/以便“主题”仍然可以保持正确。

提前致谢。

3 个答案:

答案 0 :(得分:12)

$check1 =~ /$search_key/不起作用,因为$search_key中的任何特殊字符都会被解释为正则表达式的一部分。

此外,这确实测试$check1是否包含子串 $search_key。你真的想要$check1 =~ /^$search_key$/,虽然由于上面提到的原因它仍然是不正确的。

最好坚持使用eq进行精确的字符串比较。

答案 1 :(得分:11)

如前所述,$ search_key中的特殊字符将被解释,为了防止这种情况,请使用\Qif ( $check1 =~ /\Q$search_key/),这将使$search_key的内容为文字。例如,您可以使用\E结束此if ( $check1 =~ /\b\Q$search_key\E\b/)

此信息位于perlre

答案 2 :(得分:1)

关于第二个问题,如果只想要普通子字符串匹配,可以使用index函数。然后替换

if ($category_id eq "subj") {

if (0 <= index $category_id, "subj") {

这是区分大小写的匹配。

添加以下内容:它将匹配asubjsubj,甚至subjugate