Reference found where even-sized list expected

perl

Solution

Because your hash is assigned to a reference, and not a hash (even-sized list). You need to do:

my $hashref = shift;

...

$hashref->{$final_name} = $seven;

ETA: You should call subroutines without `&`, e.g. `populate(...)`, unless you specifically want to override the prototype of the sub. If you don't know what a prototype is, just don't use `&`.

ETA2: You really should use a lexical filehandle and three-argument open. Consider this scenario:

open INFILE, $file;
some_sub();
$args = <INFILE>;  # <--- Now reading from a closed filehandle

sub some_sub {
    open INFILE, $some_file;
    random code...
    close INFILE;
}

Problem

I am writing this code in perl where i create a unique key and then assign a value to it. ``` sub populate { my $file = shift; my %HoH = shift; open(INFILE,$file); . . . $final_name = $prepend.$five; $HoH{$final_name} = $seven; } ``` Now i am passing in two parameters to a subroutine which id like ``` &populate(\%abc,$file_1); &populate(\%xyz,$file_2); ``` Why does it give me an error like this: ``` Reference found where even-sized list expected ```

Original source