Автономный пример:
use strict;
use warnings;
my $s = 'jbloggs:x:9999:99:Joe Bloggs:/home/jbloggs:/bin/ksh';
my @tokens = split /:/, $s;
my ($first, $last) = split /\s+/, $tokens[4];
$tokens[4] = uc($last) . " $first";
print join(':', @tokens), "\n";
__END__
jbloggs:x:9999:99:BLOGGS Joe:/home/jbloggs:/bin/ksh
Как сценарий (вывод в STDOUT; должен перенаправить вывод в файл):
use strict;
use warnings;
while (<>) {
chomp;
my @tokens = split /:/;
my ($first, $last) = split /\s+/, $tokens[4];
$tokens[4] = uc($last) . " $first";
print join(':', @tokens), "\n";
}