in reply to Re: Wrong Results in checking if hash value is defined or not
in thread Wrong Results in checking if hash value is defined or not

Hi Eilly , Thanks for your inputs. I have puts small portion of the complete code to replicate scenerio. I have used dumper and checked the results before and after execution of the loop and observed that even elseif condition was not satisfied, that loop got executed. I have modified my code as below to print initial and final value of the hash before and after the loop.
foreach my $net(@netLst){ //For debug foreach my $key_net (keys %{$moduleRef->{modRef}{$moduleName +}{ioRef}}) { print "IN: moduleName = $moduleName; net = $key_net; indx + = $moduleRef->{modRef}{$moduleName}{ioRef}{$key_net}{indx}\n"; } if($net =~ /\'/) {next;} elsif(defined ($moduleRef->{modRef}{$moduleName}{ioRef}{$net}) +) { print "$net is part of hash "; } //For debug foreach my $key_net (keys %{$moduleRef->{modRef}{$moduleName +}{ioRef}}) { print "OUT: moduleName = $moduleName; net = $key_net; ind +x = $moduleRef->{modRef}{$moduleName}{ioRef}{$key_net}{indx}\n"; } }
It Printed output as below.
IN: moduleName = msc_chan_reset; net = ch_rst_l; indx = 2 IN: moduleName = msc_chan_reset; net = data_in; indx = 3 IN: moduleName = msc_chan_reset; net = clk; indx = 0 IN: moduleName = msc_chan_reset; net = rst_l; indx = 1 IN: moduleName = msc_chan_reset; net = data_out; indx = 4 ts_500_gated_clk_buf is hash part of hash OUT: moduleName = msc_chan_reset; net = ch_rst_l; indx = 2 OUT: moduleName = msc_chan_reset; net = data_in; indx = 3 OUT: moduleName = msc_chan_reset; net = clk; indx = 0 OUT: moduleName = msc_chan_reset; net = ts_500_gated_clk_buf; indx = + OUT: moduleName = msc_chan_reset; net = rst_l; indx = 1 OUT: moduleName = msc_chan_reset; net = data_out; indx = 4 ####:
So here even though ts_500_gated_clk_buf was not part of the hash, it executed that loop and here on it added that hash with net ts_500_gated_clk_buf even though it wasn't intended. Thanks, Sandeep

Replies are listed 'Best First'.
Re^3: Wrong Results in checking if hash value is defined or not
by Eily (Monsignor) on Jun 30, 2017 at 09:51 UTC

    Please use a dumper module to display the content of your hashes rather than try to print them, not only will it help tell if a value is actually defined or the empty string, it will also make it much easier for us to try and reproduce your defect.

    And if you're going to use the same deep-level element several times in a row, please use a temp variable for readability: my $ioRef = $moduleRef->{modRef}{$moduleName}{ioRef}; With that you'll be able to call keys %$ioref; and $ioref->{$net}. It also helps make sure you are actually always accessing the same thing.

    Also, your output doesn't match your code. Your code prints "$net is part of hash " but your output has "is hash part of hash", so either you are not giving us the output you got from that code, or you are working with the wrong file.