I had a subroutine that was returning a hash - I refactored it so that all the assignments to the hash in the sub happened in a nice clear hash slice operation - however, I found the caller wasn't getting back the right result.
Problem was I was returning the result of the hash slice assignment - which is actually the list on the right hand side of the assignment, not the hash itself. A more minimal example is ...my %run_factors = $this_week->get_run_factors(); ... package Week; ... sub get_run_factots { my ($self) = @_; my %run_factors; @run_factors{$self->active_runs()} = $self->factors(); }
Gives#!/usr/bin/perl -w use strict; my @keys = qw(a b c d); my @values = (1, 2, 3, 4); my %result = build_hash(); use Data::Dumper; print STDERR Dumper(\%result); sub build_hash { my %return; @return{@keys} = @values; }
So beware - dont make the hash assignment be the last thing you do before returning home...$VAR1 = { '1' => 2, '3' => 4 };
...it is better to be approximately right than precisely wrong. - Warren Buffet
In reply to hash slice ? No thanks, I'm about to return... by leriksen
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |