http://qs321.pair.com?node_id=718158


in reply to Creating hash Array

Hi ashnator

'@_' is the special variable used for subroutine arguments, instead you should use the array variable like

use strict; my %href; my $fn=<>; open(FH,"$fn") || die("Cannot open:$!"); while(<FH>) { my @array =split('\t',$_); ###@array is the array variable my $key = $array[0]; $href{$key} = $array[1]; } while (my ($key, $value) = each(%href)) { print $key.", ".$value."\n"; }

Punitha

Replies are listed 'Best First'.
Re^2: Creating hash Array
by blazar (Canon) on Oct 21, 2008 at 09:40 UTC

    I personally believe that while @_ should certainly not be used as a general purpose variable, @array is as a horrible a name as one can be. It's like having a dog and calling it "dog!!" FWIW, a single letter variable would be better, especially here, since it's used only in two lines - except that I would use two scalars instead. Even better: since the whole file is slurped anyway, how 'bout the following?

    my %data = map { chomp; split /\t/, $_, 2 } <FH>;

    (Of course, it will fail if there are not enough entries for some record. In which case it would require some sanitizing which is left as an exercise to the OP.)

    --
    If you can't understand the incipit, then please check the IPB Campaign.