For when, with the dawn of a new day, your mind is more clear:
my $n = scalar @f;
scalar @f gives the number of elements of the array, which is probably not what you want if you're iterating over the elements of the array:
c:\@Work\Perl>perl -wMstrict -le
"my @f = (9, 8, 7);
my $n = scalar @f;
for (0 .. $n) {
print qq{index $_: element $f[$_]};
}
"
index 0: element 9
index 1: element 8
index 2: element 7
Use of uninitialized value in concatenation (.) or string at -e line 1
+.
index 3: element
Better to use $#f which yields the highest index of the array. Then,
my $n = $#f;
would give you something sensible, and you don't even really need the intermediate $n variable:
c:\@Work\Perl>perl -wMstrict -le
"my @f = (9, 8, 7);
for (0 .. $#f) {
print qq{index $_: element $f[$_]};
}
"
index 0: element 9
index 1: element 8
index 2: element 7
Give a man a fish: <%-(-(-(-<
|