1

我想检查数组条目的最后一个字符,是否是括号。

我的代码如下所示:

        my $lastchar = substr $blub[8],-1,1;
        print "$lastchar..............................\n";
        if ($lastchar == "\(" )
        {
            splice @blub, 8, 2, join('', @blub[8,9]);
        }

但是这段代码不起作用......它匹配每个括号,当它是一个开放的“(”或一个封闭的括号“)”时......

提前致谢。问候,约翰。

4

2 回答 2

4

正如其他人提到的,您需要使用eq而不是==用于字符串比较。

eq测试字符串相等,而==测试数字相等。这是必要的,因为 Perl 是动态类型的。它需要知道您是想将某些东西视为数字还是字符串。例如,"123.00"在数值上等价于"123",但两者不是字符串等价的。

在您的原始代码中,Perl 获取每个的数字部分$lastchar"\("比较它们。但是,由于两者都没有任何数字,因此每个的“数字部分”都等于零,并且比较总是正确的。

您应该始终use warnings; use strict;在您的代码中。如果您启用了警告,您将在比较中收到有关非数字值的警告。

但是,为此使用正则表达式会更 Perlish 和更简单:

if ($blub[8] =~ /\($/)
{
    splice @blub, 8, 2, join('', @blub[8,9]);
}
于 2013-04-03T09:40:34.277 回答
3

您需要使用eq( ==is for numbers and eqis for strings) 和 just "("(这里不需要转义)

    my $lastchar = substr $blub[8],-1,1;
    print "$lastchar..............................\n";
    if ( $lastchar eq "(" )
    {
        splice @blub, 8, 2, join('', @blub[8,9]);
    }
于 2013-04-03T09:38:10.320 回答