in reply to Use of foreach

Looks like the first value in @file_names is uninitialised. There's nothing wrong with your usage of foreach - except that it's going to exit immediately after printing the first value in @file_names instead of iterating through the entire array. Here's a simple way of generating the warning (and, btw, it is only a warning, not an error):
C:\_32>perl -wle "@file_names=(undef);foreach(@file_names){print $_}" Use of uninitialized value in print at -e line 1.
If you're on nix and not windows then you'll need to replace the double quotes with single quotes.

Cheers,
Rob