-1

在 Perl 中比较字符串值时,以下两者有什么区别

if ($delta eq "name")

VS

if ($delta =~ /^name\b/i)

我正在尝试将两个字符串值与从数组索引中读取的“名称”进行比较。

谢谢

4

3 回答 3

3

eq字符串相等。所以它测试左边的字符串是否匹配右边的字符串。

'=~' 是绑定运算符。它测试左边的字符串,而不是右边的正则表达式模式。

更多信息可以在 perldoc 中找到这些链接Equality Operators and Binding Operators

每个的简短摘要

绑定运算符

二进制“=~”将标量表达式绑定到模式匹配。某些操作默认搜索或修改字符串 $_。该运算符使这种操作适用于其他字符串。正确的参数是搜索模式、替换或音译。左边的参数是应该被搜索、替换或音译的,而不是默认的 $_。

等式运算符

如果左参数在字符串上等于右参数,则二进制“eq”返回 true。

把它放到上下文中。仅当 $delta 的值仅是“名称”(必须全部小写)时,您的第一条语句才会匹配。第二个示例,如果 $delta if 的值以“name”开头,则无论大小写如何,都将匹配。

如果 $delta 是 "name" - 这将在语句 1 和语句 2 中匹配

如果 $delta 是 "NAME" - 这在语句 1 中不匹配,但在语句 2 中匹配

如果 $delta 是“此人的姓名” - 这在语句 1 中不匹配,但在语句 2 中匹配

于 2013-10-19T21:13:59.407 回答
1

第一个不是正则表达式,并且区分大小写,它只是尝试匹配完整的字符串as-is

第二个是正则表达式 ans 不区分大小写,只能匹配字符串的第一个单词。

于 2013-10-19T21:09:50.237 回答
1

仅当变量 $delta 恰好包含 secuence 时,第一个才匹配name

第二个更宽容。它只需要在name字符串的开头加上一个单词边界就可以成功。它也不关心 secuence 是否是nameorNAMENaMe等...

于 2013-10-19T21:23:05.380 回答