gpt4 book ai didi

perl - 我的评估是错误的还是我不明白 Perl 中的 eq vs ==

转载 作者:行者123 更新时间:2023-12-03 18:15:53 25 4
gpt4 key购买 nike

我无法理解 eval 或者我可能不理解 eq对比 == .
我有这个简短的 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]

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

最佳答案

其他人已经指出了你问题的根源。我将建议您避免使用字符串 eval以此目的。相反,您可以使用查找表:

#!/usr/bin/env perl

use strict;
use warnings;

my %ops = (
'=' => sub { $_[0] eq $_[1] },
);

while(my $test = <DATA>) {
next unless $test =~ /\S/;
$test =~ s/\s+\z//;
my ($arg1, $arg2, $op ) = split /,/, $test;
if ($ops{$op}->($arg1, $arg2)) {
print "'$arg1' $op '$arg2' is true\n";
}
}
__DATA__
cat,cat,=

关于perl - 我的评估是错误的还是我不明白 Perl 中的 eq vs ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30603319/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com