【发布时间】:2018-04-08 07:02:50
【问题描述】:
我正在尝试比较两个大文件并将包含相同内容的每一行与“Mus musculus”写入一个新文件。我的代码是:
#!/usr/bin/perl
use warnings;
use strict;
my $infile1 = "geneIDs3_MouseToUniProtAccessions.txt";
my $inFH1;
unless (open ($inFH1, "<", $infile1)){
die join (' ', "can't open", $infile1, "for reading", $!);
}
my @list1 = <$inFH1>;
shift @list1;
close $inFH1;
my @list1_new;
for ($a = 0; $a < scalar @list1; $a++){
if ($list1[$a] =~ /(.*Mus musculus.*)/){
push @list1_new, $1;
}
}
my $infile2 = "affymetrixIDs_MouseToUniProtAccessions.txt";
my $inFH2;
unless (open ($inFH2, "<", $infile2)){
die join (' ', "can't open", $infile2, "for reading", $!);
}
my @list2 = <$inFH2>;
shift @list2;
close $inFH2;
my @list2_new;
for ($a = 0; $a < scalar @list2; $a++){
if ($list2[$a] =~ /(.*Mus musculus.*)/){
push @list2_new, $1;
}
}
my @list = ("");
for ($a = 0; $a < scalar @list1_new; $a++){
for ($b = 0; $b < scalar @list2_new; $b++){
if ($list1_new[$a] eq $list2_new[$b]){
push @list, $list1_new[$a];
}
}
}
unless (open (@list, ">", "match_1.txt")){
die join (' ', "can't write the common interest");
}
运行后,perl 给我一个错误声明Can't use string ("1") as a symbol ref while "strict refs" in use at match_for_part_III_9.pl line 47.
有人知道怎么解决吗?任何建议将不胜感激。
【问题讨论】:
-
第 47 行是哪一行?我没心情在屏幕上眯着眼数数。
-
unless (open (@list, ">", "match_1.txt")){ -
一方面,您尝试使用
@list的标量表示作为最后一次open调用的文件句柄。错了。 -
我想你想要的是
open my $fh, '>', 'match_1.txt'; print $fh @list;。这将是一个面对面的时刻。 :) -
您可能还想在Code Review 上发布该代码,有一些事情可以改进以使您的代码更具可读性。如果你有兴趣,那就是。其中一些包括使用
$a和$b,它们是为sort保留的全局变量。此外,您的@list将始终包含一个空行。
标签: perl