@test =(1,2,2.5,3.5,4.5,7,6,-5,-6,-7,7,8,9,10,0,12,18); sub range { @_=sort{$a<=>$b}@_;@r=($l)=$_[0]; map{if(abs$l-$_>1){push@r,$r=$_; $r[-2].="~$l";}$l=$_;}@_;@r; } @result = range(@test); print "$_\n" for @result; Prints: -7~-5 0~4.5 6~10 12~12 18