如何解决如果这两种Perl书写风格有什么区别,为什么结果不同?
我已经写了这两个,但结果却不同。我不确定哪里错了。
对于第一种样式,我将运算符放在“ if”条件之前:
$da{$array[0]}++ and $str="\n$array[0]\t$array[1]\t$array[-2]\n" if(exists $da{$array[0]} and $str!~/$array[0]\t$array[1]\t$array[-2]/);
,结果是:
R8112033 3
R8112038 1
R8112056 1
R8112057 1
第二种常见样式:
if(exists $da{$array[0]} and $str!~/$array[0]\t$array[1]\t$array[-2]/)
{
$da{$array[0]}++;
$str="\n$array[0]\t$array[1]\t$array[-2]\n";
}
结果是:
R8112033 2
R8112038 1
R8112056 1
R8112057 1
第二个结果是我想要的,但是我不知道为什么它不能以第一种样式工作。
这是数据文件:
R8112033 EGFR T790M missense_mutation否
R8112033 EGFR L858R missense_mutation否
R8112033 TP53-missense_mutation否
R8112038 KRAS G12D missense_mutation否
R8112056-L858R missense_mutation是
R8112057 KRAS G12C missense_mutation否
这是完整的代码:
use strict;
use warnings;
my $infile=shift;
my %da;
my $str=0;
open IN,"$infile" or die $!;
while(<IN>)
{
s/\r|\n//g;
my @array = split /\t/,$_;
$da{$array[0]}=0 if($array[-3]=~/\w/);
}
close IN;
open IN,$_;
$da{$array[0]}++ and $str="\n$array[0]\t$array[1]\t$array[-2]\n" if(exists $da{$array[0]} and $str!~/$array[0]\t$array[1]\t$array[-2]/);
#if(exists $da{$array[0]} and $str!~/$array[0]\t$array[1]\t$array[-2]/)
#{
# $da{$array[0]}++;
# $str="\n$array[0]\t$array[1]\t$array[-2]\n";
#}
}
close IN;
for my $key (sort keys %da)
{
print "$key\t$da{$key}\n";
}
感谢您的帮助。
解决方法
您得到不同的结果,因为
$da{$array[0]}++ and $str = "..."
和
$da{$array[0]}++; $str = "..."
不相等。第二个计算两个表达式,而第一个可能不执行赋值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。