use strict; use warnings; my $log_dir = "dir"; my $log_pre = "file"; my $hist_size = 10; foreach(sort {($b =~ m/(\d+)$/)[0] <=> ($a =~ m/(\d+)$/)[0]} <$log_dir/$log_pre.*>){ my $f=$_; s/(\d+)$/$1+1/e; if($1 >= $hist_size){ unlink $f; }else{ rename $f,$_; } }