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

Jon*_*Jon 4 perl

工作代码:

if ( $check1 eq $search_key ...
Run Code Online (Sandbox Code Playgroud)

以前的'buggy'代码:

if ( $check1 =~ /$search_key/ ...
Run Code Online (Sandbox Code Playgroud)

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

$check1是通过分裂获得的.$search_key要么在("word")之前输入,要么在运行时输入:(<>),然后将它们传递给子程序.

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

if ($category_id eq "subj") {
Run Code Online (Sandbox Code Playgroud)

我希望能够说:=~ /subj/所以"主题"仍然是真的.

提前致谢.

Bla*_*iev 12

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

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

更好地坚持eq进行精确的字符串比较.

  • 即使`$ search_key`没有特殊的正则表达式字符,`/ ^ $ search_key $ /`也可以与`$ search_key`完全匹配,或者``$ search_key`与尾随的换行符匹配.当你的意思是"字符串的结尾"时,请使用`\ z`. (2认同)
  • @Jon,如果`$ check1`包含`move`而`$ search_key`包含`move`,那么`$ check1 =〜/ $ search_key /`将返回true.(当`$ check1`包含`mover`时,它也会返回true,顺便说一句.)你暗示它并不意味着你不知道`$ check1`或`$ search_key`实际上包含什么. (2认同)

mir*_*rod 11

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

此信息属于 perlre