在 Perl 中比较字符串值时,以下两者有什么区别
if ($delta eq "name")
VS
if ($delta =~ /^name\b/i)
我正在尝试将两个字符串值与从数组索引中读取的“名称”进行比较。
谢谢
在 Perl 中比较字符串值时,以下两者有什么区别
if ($delta eq "name")
VS
if ($delta =~ /^name\b/i)
我正在尝试将两个字符串值与从数组索引中读取的“名称”进行比较。
谢谢
是eq
字符串相等。所以它测试左边的字符串是否匹配右边的字符串。
'=~' 是绑定运算符。它测试左边的字符串,而不是右边的正则表达式模式。
更多信息可以在 perldoc 中找到这些链接Equality Operators and Binding Operators
每个的简短摘要
绑定运算符
二进制“=~”将标量表达式绑定到模式匹配。某些操作默认搜索或修改字符串 $_。该运算符使这种操作适用于其他字符串。正确的参数是搜索模式、替换或音译。左边的参数是应该被搜索、替换或音译的,而不是默认的 $_。
等式运算符
如果左参数在字符串上等于右参数,则二进制“eq”返回 true。
把它放到上下文中。仅当 $delta 的值仅是“名称”(必须全部小写)时,您的第一条语句才会匹配。第二个示例,如果 $delta if 的值以“name”开头,则无论大小写如何,都将匹配。
如果 $delta 是 "name" - 这将在语句 1 和语句 2 中匹配
如果 $delta 是 "NAME" - 这在语句 1 中不匹配,但在语句 2 中匹配
如果 $delta 是“此人的姓名” - 这在语句 1 中不匹配,但在语句 2 中匹配
第一个不是正则表达式,并且区分大小写,它只是尝试匹配完整的字符串as-is。
第二个是正则表达式 ans 不区分大小写,只能匹配字符串的第一个单词。
仅当变量 $delta 恰好包含 secuence 时,第一个才匹配name
。
第二个更宽容。它只需要在name
字符串的开头加上一个单词边界就可以成功。它也不关心 secuence 是否是name
orNAME
或NaMe
等...