我想检查一个数组条目的最后一个字符,如果它是一个括号。
我的代码如下所示:
my $lastchar = substr $blub[8],-1,1;
print "$lastchar..............................\n";
if ($lastchar == "\(" )
{
splice @blub, 8, 2, join('', @blub[8,9]);
}
但是这段代码不起作用......它匹配每个括号,当它是一个开放的“(”或一个封闭的括号“)”......
提前致谢。 问候,约翰。
答案 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]);
}