X-Git-Url: http://git.shiar.net/perl/list-index.git/blobdiff_plain/356b069f60818a6ef5f0f8cf97a78924675c2c5b..f201c1cafae5e0a87e562961316c7650b0e2231a:/lib/List/Index.pm diff --git a/lib/List/Index.pm b/lib/List/Index.pm index bf4e04d..3663c24 100644 --- a/lib/List/Index.pm +++ b/lib/List/Index.pm @@ -24,7 +24,7 @@ sub ranges { $pagesize = @$self / $pages; my $offset = $pagesize; - my @links = (['']); + my @links = (''); while ($offset < @$self) { my $link = substr $self->[$offset], 0, $length; if ($context) { @@ -57,17 +57,19 @@ sub ranges { } } - push @links, [$link]; + push @links, $link; $offset += $pagesize; } + use List::MoreUtils 'uniq'; + @links = uniq @links; for my $i (0 .. $#links - 1) { - my ($link, $lastchar) = $links[$i + 1]->[0] =~ /(.*)(.)/; + my ($link, $lastchar) = $links[$i + 1] =~ /(.*)(.)/; $link .= $lastchar le 'a' ? '.' : chr( ord($lastchar) - 1 ); - next if $link eq $links[$i]->[0] and $i; - $links[$i]->[1] = $link; + next if $link eq $links[$i] and $i; + $links[$i] .= '-'.$link; } - $links[-1]->[1] = ''; + $links[-1] .= '-'; return \@links; } @@ -90,6 +92,7 @@ sub rangematch { my $next = $char; $next = chr( ord($char) + 1 ) if length $s1 > $i + 1; my $last = 'z'; + next if $next gt $last; if (length $s2 > $i) { if ($s2 =~ /^\Q$prefix/) { $last = substr $s2, $i, 1;