2017-10-26 1 views
0

두 개의 큰 파일을 비교하고 "Mus musculus"가있는 모든 내용을 포함하는 모든 줄을 새 파일에 쓰려고합니다. 내 코드는 다음과 같습니다"strict refs"사용 중 문자열을 기호 ref로 사용할 수 없습니다

#!/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"); 
} 

실행 한 후, 펄이 나에게 Can't use string ("1") as a symbol ref while "strict refs" in use at match_for_part_III_9.pl line 47.

사람이 그것을 해결하는 방법을 알고 있나요 언급 한 오류를 준다? 어떤 제안이라도 대단히 감사하겠습니다. 당신은 47

#    VVVV 
unless (open (@list, ">", "match_1.txt")){ 
    die join (' ', "can't write the common interest"); 
} 

대신 줄을 작성하기위한 match_1.txt을 열려면 파일 핸들로 @list의 스칼라 표현을 사용하려고

+2

어떤 줄이 47 줄입니까? 내 화면에서 곁눈질로 계산할 기분이 아니야. – jwodder

+1

'unless (open (@list, ">", "match_1.txt")) {' –

+1

마지막 호출에 대한 파일 핸들로'@list'의 스칼라 표현을 사용하려고합니다. 그건 틀렸어요. – simbabque

답변

3

, 당신은 새 파일 핸들을 만들려면 및 print 그 손잡이에 @list.

open my $fh, '>', 'match_1.txt' or die "Can't write the common interest: $!"; 
print $fh @list; # will join on $\ implicitly 
close $fh; 
+0

그래, 문제가있는 것 같습니다. 그러나 코드의 마지막 부분을'my $ inFH; @ list1_new = <$inFH>; (open ($ inFH, ">", match_1.txt ")) { \t ('',"공통 관심사를 쓸 수 없음 "); 은}', 그것은 match_for_part_III_9.pl 라인에서 에서 초기화되지 않은 값 $의 inFH의'사용 나에게 당신은 왜 핸들을 재사용하는 match_for_part_III_9.pl 라인 54.' –

+0

@WenjiaZhai에서 개봉 핸들에 54 의 readline()를 새로운 오류를 제공 독서를위한 명확한 이름이 있습니까? 그리고 왜 글쓰기를 위해 열린 파일 핸들러에서 읽는 중입니까? 54 번째 줄은 질문에 포함되어 있지 않으므로 나는 추측 할 수밖에 없습니다. – simbabque

+1

새로운 파일 핸들입니다. 이 파일 핸들을 쓰기 위해 사용하고 싶지만 값을 파일 핸들에 넣는 방법을 모르겠습니다. –

관련 문제