May not be better, faster or stronger. Just a different way to do it. Works w/numbers, letters, and -- as an added bonus -- with strings like aa, ab, ac, ad, af reduced to "aa-ad,af".
sub human {
my %h;
@h{@_}=@_;
$_=join(',',map { $h{$_}?$_:"*" } $_[0]..$_[-1]);
s/(\w+),(\w+,)*(\w+)/$1-$3/g;
s/,(\*,)+/,/g;
split(",");
}