#!/usr/bin/perl use strict; use warnings; sub elide { my ($start,$end) = @_; my $len = length( $end ); for ( reverse 0..$len ) { my $start_start = substr( $start, 0, $_ ); last if $end =~ s/^$start_start//; } return ( $end ) ? $start . '-' . $end : $start; } while ( ) { print elide( split ' ', $_ ), "\n"; } __DATA__ 1 32 4 19 28 39 34 123 321 321 324 329 325 349 340 509 #### 1-32 4-19 28-39 34-123 321 324-9 325-49 340-509