add peek method to streams, implement 'inside' for collect
[catagits/HTML-Zoom.git] / lib / HTML / Zoom / FilterStream.pm
index c698159..89605dd 100644 (file)
@@ -15,9 +15,26 @@ sub new {
   );
 }
 
+sub peek {
+  my ($self) = @_;
+  if (exists $self->{_peeked}) {
+    return ($self->{_peeked});
+  }
+  if (my ($peeked) = $self->next) {
+    return ($self->{_peeked} = $peeked);
+  }
+  return;
+}
+
 sub next {
   my ($self) = @_;
 
+  # peeked entry so return that
+
+  if (exists $self->{_peeked}) {
+    return (delete $self->{_peeked});
+  }
+
   # if our main stream is already gone then we can short-circuit
   # straight out - there's no way for an alternate stream to be there