私は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";
}
}
}
http://stackoverflow.com/questions/13804351/assign-a-variableチェックの有無 - ハッシュ・キー? –
空白 - インデントと空白行 - は無料であり、ビジュアル化とデバッグのためにソフトウェアをはるかに便利にします。他の人にあなたに手伝ってもらう必要がある場合は、できるだけコードを読みやすくすることが丁寧です。この場合、私はあなたのためにそれをしました。 – Borodin
スカラーに存在することを指定する必要があります$ hash {key} – Aby