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;
In reply to Re: help with hash or arrays or hash references
by Anonymous Monk
in thread help with hash or arrays or hash references
by AWallBuilder
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |