Zes*_*Rex 1 variables perl operators
我想这是一个非常简单的问题,但经过20分钟的谷歌搜索,我找不到任何解决我的问题.
所以我想检查一个字符串变量,看它是否有'OK'某个地方.
我试过用~和~~.~给我一个错误,~~并说不是正确的操作员猜测.我认为~像"粗略"的东西,但似乎并非如此.这是我的代码:
open (INPUT, "<", $curfile);
while (<INPUT>) {
$firsttenchars= substr ($_, 0, 10);
if ($firsttenchars ~ "OK")
{
print "success";
}
}
close INPUT;
Run Code Online (Sandbox Code Playgroud)
您正在寻找模式匹配.
if ($firsttenchars =~ m/OK/) { ... }
Run Code Online (Sandbox Code Playgroud)
如果在其中的'OK'某处找到文字字符串(区分大小写),则返回true $firsttenchars.它并不关心频率,一旦发现,它就会停止寻找.
里面的东西//是正则表达式,短正则表达式.这些用于creae 模式.=~是绑定运算符,它将标量值($firsttenchars)绑定到模式匹配.的m的m//是匹配操作符.还有一个s///用于通过模式替换某些东西.
您可以阅读perlrequick,perlre和perlretut以获取更多信息.Stack Overflow上的正则表达式标记wiki是开始使用正则表达式的一个很棒的资源.
该~操作是按位反运算符.
一元"〜"执行按位否定,即1的补码.例如,0666和~027是0640.(另请参见整数算术和按位字符串运算符.)请注意,结果的宽度取决于平台:在32位平台上,~0是32位宽,但是64位宽在64位平台上,如果您期望某个位宽,请记住使用"&"运算符来屏蔽多余的位.
该~~操作被称为智能匹配.在Perl已经存在了一段时间,它应该做出聪明的事情.根据您在RHS(右侧)和LHS(左侧)上获得的内容,它的行为会有所不同.它仍然被认为是实验性的,Perl社区中的许多人都认为它存在争议.你使用了两个标尺,它们都包含字符串.这将它变成一个eq,它检查字符串是否相等.
Any任何字符串相等,
如:Any eq Any
可以在perlop中找到Perl中所有运算符的完整概述.请注意此链接指向最新版本(撰写本文时为5.24).您的Perl可能更老,可能没有全部.
如果检查的一种可以更快地'OK'被包含该字符串的是里面的index内置.它返回另一个字符串中第一次出现的字符串.因为-1如果找不到该字符串,则返回,因此需要显式检查返回值.
if (index($firsttenchars, 'OK') != - 1) { ... }
Run Code Online (Sandbox Code Playgroud)
写入比模式匹配要多一些,但速度要快得多.