Perl 两个相同的字符串比较为不相等

Mad*_*ngi 2 perl string-comparison

这是我的代码:

    my $self = shift;
    my $h    = shift;

    print "$h\n";

    my @headers = split /,/, $h;

    foreach my $el (@{$expected}) {
            my $t = shift @headers;
            chomp ($t);
            chomp ($el);
            print Dumper($el cmp $t, $el, $t);
            print "test: \'$el\' eq \'$t\' ";
            unless ($el eq $t) {
                    print "not ok $el ne $t\n";
                    return 0;
            } else {
                    print "ok\n";
            }
    }
    return 1;
Run Code Online (Sandbox Code Playgroud)

在我的第一个单元测试中,我将一个字符串传递给 $h,该字符串与 $expected 匹配。然后我有一个单元测试,它确保函数在传递不匹配的字符串时失败。这两个测试的行为符合预期。

服务器、Jira 项目、问题类型、摘要、描述、受托人、标签、Epic 链接

$VAR1 = 0;

$VAR2 = '服务器';

$VAR3 = '服务器';

测试:'服务器' eq '服务器' ok

当我从 CSV 文件中提取该行并将其传递给此函数时,我得到了不同的响应。

服务器、Jira 项目、问题类型、摘要、描述、受托人、标签、Epic 链接

$VAR1 = -1;

$VAR2 = '服务器';

$VAR3 = '服务器';

测试:'Server' eq 'Server' not ok Server ne Server

比较以某种方式暗示预期值在某种程度上小于正在测试的值。我立刻想到,正在测试的内容必须有前导或尾随字符。但是,打印和转储似乎并不能证实这一点(除非我遗漏了一些东西)。苦恼只是出于纯粹的绝望。

我错过了什么?

Mad*_*ngi 5

首先感谢@hobbs 的 $Data::Dumper::Useqq = 1; 建议。很明显,有一些我不知道如何检测的主角。

$VAR1 = -1;

$VAR2 = "服务器";

$VAR3 = "\357\273\277Server";

我正在阅读的 CSV 文件包含字节顺序标记信息。

我会剥掉它们。谢谢大家让我重新出发。

  • 如果您使用 [Text::CSV](https://metacpan.org/pod/Text::CSV) 读取 CSV 数据(强烈推荐),它将自动处理标题行开头的 BOM。 (2认同)