in reply to Re^2: Use of uninitialized value in concatenation (.) or string
in thread Use of uninitialized value in concatenation (.) or string

use strict; is a pragma that enforces lexical scoping of variables. With some very unusual exceptions, this is just a "compile time" deal. There are "our" vars (package scope) and "local" vars. Use strict and my $vars until you are very sure about why you should use one of these other forms.

Something like this is almost always wrong in Perl (almost always doesn't mean always, it just means almost:

for ($i=0;$i<=$#steps;$i++){}
my @steps = (..list of some stuff.....); foreach my $step (@steps) { ..use $step...here... no $i index needed.. }