in reply to Re: Hash creation
in thread Hash creation

Thanks for your replies..... I'm not sure they fix my problem. Here is my code creating the first hash:

foreach (@inputfields) {
($fname, $fvalue)=split(/:/, $_);
$inputs{$fname}=$fvalue; }

Here is the code for the second hash:
$defref = {
requester_name => $inputs{"Requester Email"},
requester_email => $inputs{"Project Manager Name"} }

Where the actual "Requester Email" and "Project Manager Name" are actual key values (i.e. $fname). As far as I can tell, nothing ever gets loaded into $defref. I am making illegal references? Thanks!

Replies are listed 'Best First'.
Re^3: Hash creation
by johngg (Canon) on May 02, 2008 at 22:51 UTC
    A few points:

    • You appear to have associated the email key with the name value and vice versa when creating your defref anonymous hash. I have changed them around in the code below
    • You can populate the %inputs hash without the need for the $fname and $fvalue intermediate variables by using map
    • Always put use strict; and use warnings at the top of your scripts to enforce disciplinr and catch errors
    • The Data::Dumper module is worth it's weight in doughnuts when you are not sure what your data structures look like. I use it below to show what we started with and what has ended up in the hashes
    Here's the code

    use strict; use warnings; use Data::Dumper; my @inputFields = ( q{Requester Email:fredb@big.com}, q{Project Manager Name:Fred Bloggs}, ); my %inputs = map { split m{:} } @inputFields; my $defRef = { requester_email => $inputs{ q{Requester Email} }, requester_name => $inputs{ q{Project Manager Name} }, }; print Data::Dumper->Dumpxs( [ \ @inputFields, \ %inputs, $defRef ], [ qw{*inputFields *inputs defRef} ], );

    and here's the output

    @inputFields = ( 'Requester Email:fredb@big.com', 'Project Manager Name:Fred Bloggs' ); %inputs = ( 'Requester Email' => 'fredb@big.com', 'Project Manager Name' => 'Fred Bloggs' ); $defRef = { 'requester_name' => 'Fred Bloggs', 'requester_email' => 'fredb@big.com' };

    I hope this is helpful.

    Cheers,

    JohnGG

Re^3: Hash creation
by linuxer (Curate) on May 02, 2008 at 21:11 UTC

    Did you already tried to print the desired values from %inputs to see if they are really set?

    Did you check, what's defined in %inputs (maybe a Typo bothers you here)?

    I would check if $inputs{"Requester Email"} exists and is defined when assigning it as new Value..e.g.

    $derfref = { new_key => exists $inputs{old key} and defined $inputs{old key} ? $inputs{old key} : "--no old key--" };