if条件的差异

Sal*_*afi 2 perl

我在探索一些工作代码时发现了这一点.同样在perl编码中我仍然是新手.这是我的问题: 这个IF条件之间有什么区别

if ($command =~ /send|regd|succ|fail|recv/)
Run Code Online (Sandbox Code Playgroud)

还有这个

if ( ($command == "send") || ($command == "regd") || ($command == "succ")
     || ($command == "fail") || ($command == "recv"))
Run Code Online (Sandbox Code Playgroud)

And*_*eig 5

首先,正如评论者所提到的,==进行了数字比较.如果字符串看起来不像数字,则其数值为0,因此如果使用==,则$ command似乎等于所有这些字符串.比较字符串的正确方法是使用eq,例如if ($command eq "send").

即使使用正确的相等运算符,仍然存在差异.第一个版本使用模式匹配,并且模式未锚定,因此它可以匹配字符串中的任何位置.例如,如果$command是"blahblahsendxxxxxx",$command =~ /send/则为真.您可以锚定模式以确保它匹配整个字符串,方法是在开头放置^,在结尾放置$.