我想这是一个非常简单的问题,但经过20分钟的谷歌搜索后,我无法找到解决问题的方法。
所以我想检查一个字符串变量是否在其中的某个地方有'OK'
。
我尝试使用~
和~~
。 ~
给了我一个错误,~~
表示不是正确的操作员猜测。我认为~
类似于"大致"但似乎并非如此。这是我的代码:
open (INPUT, "<", $curfile);
while (<INPUT>) {
$firsttenchars= substr ($_, 0, 10);
if ($firsttenchars ~ "OK")
{
print "success";
}
}
close INPUT;
答案 0 :(得分:8)
您正在寻找模式匹配。
if ($firsttenchars =~ m/OK/) { ... }
如果在'OK'
内的某处找到文字字符串$firsttenchars
(区分大小写),则返回true。它并不关心频率,一旦发现,它就会停止寻找。
//
中的内容是正则表达式,短正则表达式。这些用于创建模式。 =~
是binding operator,它将标量值($firsttenchars
)绑定到模式匹配。 m//
的m
是匹配运算符。还有s///
用于通过模式替换某些东西。
您可以阅读perlrequick,perlre和perlretut了解详情。 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) { ... }
这比模式匹配要多一点,但速度要快得多。