If there has to be a big long system call like that, I'd be inclined to make it as non-repetitive as possible -- build it up as an array of args, and use the list form of the system call:
use POSIX;
...
my $datedname = join('_', $servername, strftime("%m%d%Y", localtim
+e());
my %opts = (
server => 'master',
mk_image => 'yes',
source => $servername,
location => "$filepath/$servername/$datedname",
);
my @cmd = qw/nim -o define -t mksysb/;
for my $o ( keys %opts ) { push @cmd, '-a', "$o=$opts{$o}" }
push @cmd, $datedname;
print " command-line: @cmd\n";
system( @cmd );
}
You might want to get just one date string to use on all iterations of the loop -- assign the strftime string to a variable before going into the loop, and then append that variable to each server name.
(updated code snippet to add a missing quotation mark)