#!/usr/bin/perl use warnings; use strict; my @files = qw( hhk_1sss-(hello).txt hhk_2abc-(hello).txt hhk_3xyz-(hello).txt ); my @short = @files; my $pos = 0; my $file = shift @short; while ($pos < length $file and '.' ne substr $file, $pos, 1) { my $char = substr $file, $pos, 1; if (@short == grep $char eq substr($_, $pos, 1), @short) { substr $_, $pos, 1, q() for $file, @short; } else { $pos++; } } unshift @short, $file; while (@files) { my $old = shift @files; my $new = shift @short; print "rename $old $new\n"; }