我写了这两封信,但结果不一样。我不知道哪里出了问题。
对于第一种样式,我将操作放在“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 No
R8112033 EGFR L858R missense_mutation No
R8112033 TP53 - missense_mutation No .
R8112038 KRAS G12D missense_mutation No
R8112056 - L858R missense_mutation是
R8112057 KRAS G12C missense_mutation No
以下是完整的代码:
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, "$infile" or die $!;
while(<IN>)
{
s/\r|\n//g;
my @array = split /\t/,$_;
$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";
}任何帮助都是非常感谢的。
发布于 2020-08-13 05:45:50
你得到不同的结果,因为
$da{$array[0]}++ and $str = "..."和
$da{$array[0]}++; $str = "..."是不对等的。第二个表达式计算两个表达式,而第一个表达式可能不会执行赋值。
https://stackoverflow.com/questions/63388775
复制相似问题