in reply to check my code

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)