【问题标题】:why didn't I get an error from perl when $v=false; [duplicate]为什么当 $v=false 时我没有从 perl 得到错误; [复制]
【发布时间】:2020-08-10 22:55:47
【问题描述】:

我在命令行上写道:

perl -e '$v=false; if($v==true){print 1;}'

它没有产生错误,而是返回“1”!

我记得过去这会返回一个错误,提醒我 perl 没有布尔类型。同时perl有什么变化吗?还是我记错了,这总是有效的代码?

【问题讨论】:

  • perlmaven.com/barewords-in-perl。总是use strictuse warnings
  • 非常感谢!我编辑了 .bashrc 并添加了alias perl="perl -Mstrict -Mwarnings"
  • 您可以使用默认选项设置PERL5OPT,而不是别名perl

标签: perl


【解决方案1】:

没有strict,裸字false 被解释为字符串('false')。使用数字 == 将其数字化为 0,而 "true" 作为数字也为零。

B::Deparse 显示清楚:

$ perl -MO=Deparse -e '$v=false; if($v==true){print 1;}'
$v = 'false';
if ($v == 'true') {
    print 1;
}

warnings 会警告您 4 次:两次关于未引用的裸词,两次关于字符串的数字比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-15
    • 2018-06-06
    • 1970-01-01
    • 2012-10-24
    • 2012-10-02
    • 1970-01-01
    • 2014-12-20
    相关资源
    最近更新 更多