Ok does this make sense?:
#!/usr/bin/perl
use warnings;
use strict;
use XML::Simple;
use Carp;
use File::Find;
use Data::Dumper;
my %hash;
my $default_dir = "C:/Main/work";
if (@ARGV == 1)
{
$default_dir = shift @ARGV
)
elsif (@ARGV >1)
{
die "too many command line args\n";
};
find (\&process_file_name, $default_dir);
# find() will start at the $default_dir
# and call process_file_name for each file or
# directory that it finds at or "beneath" the
# $default_dir
sub process_file_name
{
my $current_file = $File::Find::Name;
#$File::Find::name is the complete pathname to the file.
return unless (-f $current_file and
$current_file =~ /_service\.xml$/);
# we are at a data file (not a directory)
# and this file name ends in _service.xml
process_the_file ($current_file);
}
sub process_the_file
{
my $file_path = shift;
...open the $file_path
...figure out what you want from that file...
...$hash{$file_path} = "some data";
# this is how the data is "returned"
# %hash has "global scope"
# add an entry to %hash instead of
# returning a value from this sub
...close the file
}