我的eval是错误的还是我不理解Perl中的eq vs ==

前端之家收集整理的这篇文章主要介绍了我的eval是错误的还是我不理解Perl中的eq vs ==前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我无法理解eval或者我不理解eq vs ==.
我有这个简短的Perl脚本:

[red@tools-dev1 ~]$cat so.pl
#!/usr/local/bin/perl -w
use strict;

while(<DATA>) {
    chomp;
    my ($arg1,$arg2,$op ) = split /,/;
    if ( $op eq '=' ) {
        $op = 'eq';
    }
    my $cmd = "$arg1 $op $arg2";
    print "[$cmd]\n";
    my $rc = eval $cmd || 0;
    print "rc is [$rc]\n";
}

__DATA__
cat,cat,=

当我执行它时,我得到:

[red@tools-dev1 ~]$./so.pl
[cat eq cat]
rc is [0]

有人会认为你会……

[cat eq cat]
rc is [1]

…因为“猫”等于“猫”,对吧?

解决方法

您在严格模式下使用裸字,这是一个错误

$perl -e 'use strict; cat eq cat'
Bareword "cat" not allowed while "strict subs" in use at -e line 1.
Bareword "cat" not allowed while "strict subs" in use at -e line 1.
Execution of -e aborted due to compilation errors.

每当你评估一个字符串时,你应该检查$@以查看是否有错误.

猜你在找的Perl相关文章