in reply to Sort and Substitution

In that last for loop, you may want to do something more like this:
foreach $x (@ordered){ substr($x,0,6))=sprintf("%06d", $count++); }

Now that is a lot to throw at you at once so...

One, the foreach loop goes thru each item in an array, setting $x to each line in the array. $x really is each row as it goes thru the list so if you change $x you change the array, one line at a time. Very handy for what you want to do. =)

substr() can easily grab the first 6 characters from $x. You knew that I can see. What you may not have known was, you can assign TO the substr call and it will replace the substr'ing you asked for with what you have on the right side of the '='. Thus you can replace the 6 numerals at the beginning with whatever you want.

Now on the right side of the equals, sprintf() is likely new to you. It lets you prepare a string for "printing" based on a "format". The format I gave it is "%06d" which means to give me a 6 digit number, padded with zeros, taken from the variable(s) following the format.

I've given sprintf the output from $count++ . The output from $count++ is the value of $count BEFORE one is added to it. So the first time thru the loop sprintf makes "000001" and $count=2!

Others have noted that you might have done the sort better and such but really you were doing pretty good. I hope I didn't throw too much at you and I hope it helps!

--
$you = new YOU;
honk() if $you->love(perl)