Perl,检查最后一个char是否为括号

时间:2013-04-03 09:34:10

标签: arrays perl match

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

我的代码如下所示:

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

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

提前致谢。 问候,约翰。

2 个答案:

答案 0 :(得分:4)

正如其他人所提到的,您需要使用eq而非==进行字符串比较。

eq tests string equality, while == tests numeric equality。这是必要的,因为Perl是动态类型的。它需要知道您是否要将某些内容视为数字或字符串。例如,"123.00"在数值上等同于"123",但两者不是字符串等效。

在原始代码中,Perl获取了每个$lastchar"\("的数字部分并进行了比较。但是,既然没有任何数字,每个数字的“数字部分”相当于零,并且比较总是正确的。

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

然而,使用正则表达式会更简洁,更简单:

if ($blub[8] =~ /\($/)
{
    splice @blub, 8, 2, join('', @blub[8,9]);
}

答案 1 :(得分:3)

您需要使用eq==代表数字,eq代表字符串),只需"("(此处无需转义)

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