Zoe
Zoe

Reputation: 55

Correct use of Perl "exists"

I have two files. The first two columns in both are chromosome loci and genotypes, for instance chr1:1736464585 and T/G.

I have put the first two columns into a hash. I want to check whether the hash key (the chromosome locus) exists in the second file.

I have written this Perl program and have tried many variations but I'm not sure if I'm using exists correctly: it gives the error 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";
        }
    }
}

Upvotes: 1

Views: 587

Answers (1)

bjerre
bjerre

Reputation: 109

The syntax of the following line is incorrect:

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

This should be:

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

Upvotes: 9

Related Questions