It is hard to imagine why this specific problem would have its own solution.
The problem can be generalized into something worth solving. Assume we want to divide a list on break points. I will present an iterator solution.
This leaves a lot to be desired but the idea jumped into my head and so I thought I would share.#!/usr/bin/perl use strict; use warnings; use Data::Dumper; sub gen_divider { my %opt = @_; my $is_break = $opt{detect_break}; my ($curr, @list); return sub { for (@_) { if (! defined $curr || $is_break->($_, $curr)) { push @list, [$_]; $curr = $_; } else { push @{$list[-1]}, $_; } } return \@list; }; } my $break_point = sub { my ($item_to_test, $prev_break_point) = @_; return $item_to_test ne $prev_break_point; }; my $divide = gen_divider(detect_break => $break_point); for (split //, "ZBBBCZZ") { $divide->($_); } my $list = $divide->(); print Dumper($list);
Cheers - L~R
In reply to Re: Yet Another Rosetta Code Problem (Perl, Ruby, Python, Haskell, ...)
by Limbic~Region
in thread Yet Another Rosetta Code Problem (Perl, Ruby, Python, Haskell, ...)
by eyepopslikeamosquito
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |