我有两个文件。两者中的前两列是染色体位点和基因型,例如chr1:1736464585
和T/G
。
我已将前两列放入哈希值。我想检查第二个文件中是否存在哈希键(染色体基因座)。
我已编写此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 :(得分:9)
以下行的语法不正确:
if (exists %hash1{$key}) { ... }
这应该是:
if (exists $hash1{$key}) { ... }