【问题标题】:If in Perl doesn't work. Did I made a mistake? [duplicate]如果在 Perl 中不起作用。我做错了吗? [复制]
【发布时间】:2017-10-28 16:49:42
【问题描述】:

我昨天开始学习 Perl。我写了这段代码:

print "Please type in your password.\n";
print "Password: ";
chomp($password = <>);
if ($password == "admin")
{
 print "Password is correct!";
}
else
{
 print "Password is incorrect!";
}

当我写“admin”时,它告诉我密码是正确的,但是当我写下所有其他密码时,它告诉我同样的事情。这就像 if 没有执行。我能做什么?

【问题讨论】:

  • 总是使用use strict; use warnings qw( all );!!!

标签: perl


【解决方案1】:

比较运算符“==”用于比较数字,而运算符“eq”用于比较字符串。

【讨论】:

    【解决方案2】:

    要比较字符串,使用eq 运算符。我也经常犯这个错误。

    …
    if ($password eq "admin")
    …
    

    如果您在字符串上使用== 运算符,则会转换字符串中包含的数字:foo 变为零,2foo 变为 2

    【讨论】:

    • 你能解释一下字符串是如何用== 操作符转换成相等的吗?我希望它们与该运算符按长度进行比较,但显然情况并非如此。
    • 字符串总是计算为零。注意“2foo”会失败。见stackoverflow.com/a/14046696
    • 哦,谢谢!我将字符串->数字强制与向量->数字强制混合在一起。我在 Perl 6 上已经有一段时间了,所以我忘记了隐含的细节,因为在下一代中一切都更加明确了。
    • @xanoetux - 字符串 not 总是以数字方式计算为 0。以数字开头的字符串(例如您的“2foo”示例)计算为其开头的数字: perl -E 'say "2foo" + 0' 打印 2,而不是 0perl -E 'say "foo" == "2foo" ? "equal" : "not equal"' 表示 not equal
    • (我之前的评论是参考您的评论,错误地指出“字符串总是计算为零。”实际答案是正确的。)
    【解决方案3】:

    Perl 使用 eq 代替 == 进行字符串比较。

    改变

    if ($password == "admin")
    {
         print "Password is correct!";
    }
    

    if ($password eq "admin")
    {
         print "Password is correct!";
    }
    

    【讨论】:

      猜你喜欢
      • 2011-12-25
      • 1970-01-01
      • 1970-01-01
      • 2019-10-23
      • 2019-09-01
      • 2021-05-04
      • 1970-01-01
      • 1970-01-01
      • 2012-06-13
      相关资源
      最近更新 更多