String 比较perl中的字符串变量

String 比较perl中的字符串变量,string,perl,String,Perl,我在perl中有一个if子句,其中作为条件,我需要比较两个变量,如果它们作为字符串匹配。但是我的代码不起作用,字符串也不匹配: if(trim($file) eq trim($fields[0])) { print "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO"; } 对于修剪的定义,我使用了: sub trim($) { my $string = shift; $string =~ s/^\s*(.*?)\s*$/$1/; return $string

我在perl中有一个if子句,其中作为条件,我需要比较两个变量,如果它们作为字符串匹配。但是我的代码不起作用,字符串也不匹配:

if(trim($file) eq trim($fields[0])) {
print "OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO";
}
对于修剪的定义,我使用了:

sub trim($)
{
   my $string = shift;
   $string =~ s/^\s*(.*?)\s*$/$1/;
  return $string;
}
此外,我以前也用过这个来比较变量

my @fields= split(/\;/,$_);

有什么帮助吗?谢谢

您的代码是正确的,因此字符串是不同的

为了找出差异,我建议使用以下代码,因为它将显示仅打印字符串可能不明显的差异:

use Data::Dumper;
{
   local $Data::Dumper::Useqq=1;
   print Dumper($file, $fields[0]);
}

顺便说一句,以下更优雅,可能更快:

sub trim {
   my $string = shift;
   $string =~ s/^\s+//;
   $string =~ s/\s+\z//;
   return $string;
}
和IIRC相比,以下速度更快(可读性下降):


这是一个简单的子例程和一个简单的检查,它们应该按预期工作。错误在于您的输入。使用
Data::Dumper
模块查看变量真正包含的内容(与您认为它们包含的内容相反)$数据::转储程序::Useqq=1;打印转储程序($file);打印转储程序($fields[0])(useqq选项对于使空白更加明显非常重要)在
sub trim
中进行测试以查看
$string
是什么很容易。添加
打印“$string\n”换班后。
sub trim {
   my $string = shift;
   $string =~ s/^\s+|\s++\z//g;
   return $string;
}