in reply to why need my in a foreach loop?

In the old days of perl5,
foreach my $var (LIST) { .. }
was a syntax error. You had to write:
my $var; foreach $var (LIST) { .. }
or use a package variable, as pointed out earlier in this thread.

I remember the days that

foreach my $var (LIST) { .. }
was actually seen as progress...