in reply to help with hash or arrays or hash references
That big if/elsif/elsif/else block is broken, here is why/how
$ perl -e " use strict; use warnings; if( 0 ){ my $foo = 1; } else { $ +foo = 2; } " Global symbol "$foo" requires explicit package name at -e line 1. Execution of -e aborted due to compilation errors. $ perl -e " use strict; use warnings; if( 1 ){ my $foo = 1; } else { $ +foo = 2; } " Global symbol "$foo" requires explicit package name at -e line 1. Execution of -e aborted due to compilation errors.
The my $foo only exists inside that first if-block, all the other $foo refer to the undeclared global variable $foo
somebody told you to use strict, and you gave it a shot, but since you did not understand the benefits, you eventually turned it off , and now your program is broken
The shortest fix to satisfy strict is to move my $foo outside the if/else/block, as in
$ perl -e " use strict; use warnings; my $foo; if( 0 ){ $foo = 1; } el +se { $foo = 2; } "
More on scope/strict in Lexical scoping like a fox, Read this if you want to cut your development time in half! and understand that strict itself confers no benefits; The benefits come from avoidance of the bad practices forbidden by strict :)
My second piece of advice, is turn that if/else block into a function, maybe like so
my( $Flag1, $Flag2 ) = ProtsFlags( $Subj_id, \%proph_prots, \%euk_ +prots, \%vir_prots ); $HoFlg1{$Query_id}{$Subj_id}{$bits} = $Flag1; $HoFlg2{$Query_id}{$Subj_id}{$bits} = $Flag2;
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^2: help with hash or arrays or hash references
by AWallBuilder (Beadle) on May 08, 2012 at 13:22 UTC | |
by Cristoforo (Curate) on May 08, 2012 at 18:12 UTC | |
by hbm (Hermit) on May 08, 2012 at 15:17 UTC | |
by Anonymous Monk on May 08, 2012 at 15:34 UTC | |
by AWallBuilder (Beadle) on May 09, 2012 at 12:54 UTC |