在Perl中,是否有一个运算符来粗略地检查另一个字符串的字符串?

时间:2016-09-20 09:01:29

标签: perl variables operators

我想这是一个非常简单的问题,但经过20分钟的谷歌搜索后,我无法找到解决问题的方法。

所以我想检查一个字符串变量是否在其中的某个地方有'OK'

我尝试使用~~~~给了我一个错误,~~表示不是正确的操作员猜测。我认为~类似于"大致"但似乎并非如此。这是我的代码:

open (INPUT, "<", $curfile);
while (<INPUT>) {
$firsttenchars= substr ($_, 0, 10);
if ($firsttenchars ~ "OK") 
    {
    print "success";
    }               
}
close INPUT;

1 个答案:

答案 0 :(得分:8)

您正在寻找模式匹配。

if ($firsttenchars =~ m/OK/) { ... }

如果在'OK'内的某处找到文字字符串$firsttenchars(区分大小写),则返回true。它并不关心频率,一旦发现,它就会停止寻找。

//中的内容是正则表达式,短正则表达式。这些用于创建模式=~binding operator,它将标量值($firsttenchars)绑定到模式匹配。 m//m是匹配运算符。还有s///用于通过模式替换某些东西。

您可以阅读perlrequickperlreperlretut了解详情。 regex tag wiki here on Stack Overflow是开始使用正则表达式的绝佳资源。

~运算符是按位求反运算符。

  

一元&#34;〜&#34;执行按位否定,即1的补码。例如,0666&amp; 〜027是0640.(另请参见整数算术和按位字符串运算符。)请注意,结果的宽度取决于平台:在32位平台上,~0是32位宽,而在64位平台上是64位宽平台,所以如果您期望一定的位宽,请记住使用&#34;&amp;&#34;运算符掩盖多余的位。

~~运算符名为smart match。它已经在Perl中存在了一段时间,它应该做出聪明的事情。它根据您在RHS(右侧)和LHS(左侧)上的表现而有所不同。它仍然被认为是实验性的,Perl社区中的许多人都认为它存在争议。你使用了两个标尺,它们都包含字符串。这将它变成eq,它检查字符串是否相等。

  

任何字符串相等
                  喜欢:任何eq Any

可以在perlop中找到Perl中所有运算符的完整概述。请注意此链接指向最新版本(撰写本文时为5.24)。你的Perl可能年龄较大,可能没有全部。

检查该字符串中是否包含'OK'的更快捷方式是the index built-in。它返回另一个字符串中第一次出现的字符串。因为如果找不到该字符串,它会返回-1,您需要明确检查返回值。

if (index($firsttenchars, 'OK') != - 1) { ... }

这比模式匹配要多一点,但速度要快得多。