2016-08-25 7 views
1

私は2つのファイルを持っています。両方の最初の2つの列は染色体遺伝子座および遺伝子型であり、例えばchr1:1736464585およびT/Gである。Perlの正しい使用は "存在する"

私は最初の2つの列をハッシュに入れました。私はハッシュキー(染色体座)が第2のファイルに存在するかどうかをチェックしたい。

私はこのPerlプログラムを書いていて、多くのバリエーションを試しましたが、existsを正しく使用しているかどうかはわかりません。エラーexists is not an HASH or ARRAY element or a subroutineが返されます。

#!/usr/bin/perl 

use strict; 
use warnings; 

my $output = "annotated.txt"; 
open(O, ">>$output"); 

my $filename = "datatest.txt"; 
my $filename2 = "MP2.txt"; 

chomp $filename; 
chomp $filename2; 

my %hash1 =(); 

open(FN1, $filename) or die "Can't open $filename: $!"; 
my @lines = <FN1>; 

foreach my $line (@lines) { 

    my @split = split /\t/, $line; 

    if ($line =~ /^chr/) { 

     my ($key, $value) = ($split[0], $split[1]); 
     $hash1{$key} = $value; 
    } 
} 

my $DATA; 
open($DATA, $filename2) or die $!; 
my @lines2 = <$DATA>; 

foreach my $line2 (@lines2) { 

    my @split2 = split /\t/, $line2; 

    if ($line2 =~ /^chr/) { 

     if (exists %hash1{$key}) { 

      print "$line2\n"; 
     } 
    } 
} 
+0

http://stackoverflow.com/questions/13804351/assign-a-variableチェックの有無 - ハッシュ・キー? –

+0

空白 - インデントと空白行 - は無料であり、ビジュアル化とデバッグのためにソフトウェアをはるかに便利にします。他の人にあなたに手伝ってもらう必要がある場合は、できるだけコードを読みやすくすることが丁寧です。この場合、私はあなたのためにそれをしました。 – Borodin

+1

スカラーに存在することを指定する必要があります$ hash {key} – Aby

答えて

9

次の行の構文が正しくありません。

if (exists %hash1{$key}) { ... } 

これは次のようになります。

if (exists $hash1{$key}) { ... } 
+0

ありがとうBjerreとAbhay! – Zoe

関連する問題