use Fcntl ':flock'; open my $fh, '+<', 'images.dat' or die "open failed: $!"; flock $fh, LOCK_EX; seek $fh, 0, 0; my @images; while (<$fh>) { chomp; push @images, [(split /:/)[-1], $_]; } my @ordered = map { $_->[1] } sort { $a->[0] <=> $b->[0] } @images; seek $fh, 0, 0; truncate $fh, 0; print $fh join "\n", @ordered; close $fh;