正确使用Perl"存在"

时间:2016-08-25 21:42:18

标签: perl hash

我有两个文件。两者中的前两列是染色体位点和基因型,例如chr1:1736464585T/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";
        }
    }
}

1 个答案:

答案 0 :(得分:9)

以下行的语法不正确:

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

这应该是:

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