in reply to Re^4: join all elements in array reference by hash
in thread join all elements in array reference by hash
foreach $chapter ( sort {$a <=> $b} keys ($bible{$qbook}) ) { print ("joining chapter $chapter verses\n"); #my $allverses = join("\n\n",$bible{$qbook}{$chapter}{'verses'}); #print $allverses . "\n\n"; my $i; print "$#{$bible{$qbook}{$chapter}{'verses'}} verses\n"; foreach $i (0..$#{$bible{$qbook}{$chapter}{'verses'}}) { print "$bible{$qbook}{$chapter}{'verses'}[$i]\n\n"; #line 270 } }
I have not had much time to look at your post (it is kinda big; a small, self-contained, runnable code example will help your fellow monks find problems, and may very well help you to find problems just by preparing it!) and may not be able to do so thoroughly today, but a few things strike me about the code quoted above, which includes the problematic line 270:
- The expression $#{$bible{$qbook}{$chapter}{'verses'}} will yield -1 if the referenced array is empty. That this is the case is shown by the following print statement
print "$#{$bible{$qbook}{$chapter}{'verses'}} verses\n";
which produces "-1 verses". The expression 0 .. -1 produces an empty range, which means that the loop body, line 270, is never executed. You have to go back and find where this array was emptied, or else why nothing was ever put into it in the first place. - An expression like $#array or $#$array_reference evaluates to the highest array index, not to the number of elements, verses in this case, in the array.
- A stylistic point: a loop like
foreach $i (0..$#{$bible{$qbook}{$chapter}{'verses'}})
{
print "$bible{$qbook}{$chapter}{'verses'}[$i]\n\n";
}
is, IMHO, better written as
foreach my $verse (@{$bible{$qbook}{$chapter}{'verses'}}) {
print $verse, "\n\n";
}
Update: print statement in 'better' for-loop changed from print "$verse\n\n"; to print $verse, "\n\n"; and loop variable $verse made lexical my $verse instead.
|
---|
Replies are listed 'Best First'. | |
---|---|
Re^6: join all elements in array reference by hash
by johnko (Initiate) on Dec 31, 2012 at 08:29 UTC | |
by AnomalousMonk (Archbishop) on Dec 31, 2012 at 20:10 UTC |
In Section
Seekers of Perl Wisdom