move collector construction outside filter subs
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / CodeStream.pm
CommitLineData
456a815d 1package HTML::Zoom::CodeStream;
2
3use strict;
4use warnings FATAL => 'all';
5
6sub from_array {
7 my ($class, @array) = @_;
8 $class->new({ code => sub {
9 return unless @array;
10 return shift @array;
11 }});
12}
13
14sub new {
15 my ($class, $args) = @_;
16 bless({ _code => $args->{code} }, $class);
17}
18
8f962884 19sub peek {
20 my ($self) = @_;
21 if (exists $self->{_peeked}) {
22 return ($self->{_peeked});
23 }
24 if (my ($peeked) = $self->next) {
25 return ($self->{_peeked} = $peeked);
26 }
27 return;
28}
29
456a815d 30sub next {
8f962884 31 my ($self) = @_;
32
33 # peeked entry so return that
34
35 if (exists $self->{_peeked}) {
36 return (delete $self->{_peeked});
37 }
38
39 $self->{_code}->();
456a815d 40}
41
421;
43