This was a fun one. Here's a non-golfy solution I quite like, despite its assumptions.
#!/usr/bin/perl -w use strict; use Test::More tests => 1; my @list = qw( 1 2 3 4 5 6a 6b 6c 6d 6e 7 10 11 12 13 ); chomp( my $range = <DATA> ); my @result = split_list( $range ); is_deeply( \@result, \@list ); sub split_list { my $range = shift; my @list; for my $r ( split( /,/, $range ) ) { my $iter = get_points( $r ); while (my $next = $iter->()) { push @list, $next; } } return @list; } sub get_points { my $range = shift; my ($start, $end) = split( /\-/, $range ); return iter_int($start, $end) unless $start =~ /\D/; my ($number, $letter) = $start =~ /^(\d+)(\D)$/; return iter_str( $number, $letter, $number . $end ); } sub iter_int { my ($start, $end) = @_; $end ||= $start; return sub { return if $start > $end; return $start++; }; } sub iter_str { my ($start, $letter, $end) = @_; my $last = ''; return sub { return if $last eq $end; my $next = $start . $letter; $last = $start . $letter++; return $next; }; } __DATA__ 1-5,6a-e,7,10-13
In reply to Re: need help to split list
by chromatic
in thread need help to split list
by bfdi533
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |