From: Nicholas Clark Date: Sat, 15 Apr 2006 16:43:22 +0000 (+0000) Subject: If you return void from a filter subroutine, the caller's status is X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=commitdiff_plain;h=bccf3f3d1e8232741671a14320e468bb69bd7bed;p=p5sagit%2Fp5-mst-13.2.git If you return void from a filter subroutine, the caller's status is used. If not, your last statement is the return value, and if it keeps being +ve you'll never hit EOF. The probably should be a sanity check for this in toke.c, but I'm not sure how. p4raw-id: //depot/perl@27814 --- diff --git a/t/op/incfilter.t b/t/op/incfilter.t index 4dbf7e9..2ca4704 100644 --- a/t/op/incfilter.t +++ b/t/op/incfilter.t @@ -56,11 +56,11 @@ do [sub { open $fh, "<", \'fail("File handles and filters work from \@INC");'; -do [$fh, sub {s/fail/pass/}] or die; +do [$fh, sub {s/fail/pass/; return;}] or die; open $fh, "<", \'fail("File handles and filters with state work from \@INC");'; -do [$fh, sub {s/$_[1]/pass/}, 'fail'] or die; +do [$fh, sub {s/$_[1]/pass/; return;}, 'fail'] or die; print "# 2 tests with pipes from subprocesses.\n"; @@ -70,7 +70,7 @@ do $fh or die; open $fh, 'echo fail|' or die $!; -do [$fh, sub {s/$_[1]/pass/}, 'fail'] or die; +do [$fh, sub {s/$_[1]/pass/; return;}, 'fail'] or die; sub rot13_filter { filter_add(sub { @@ -92,7 +92,7 @@ ORTVA {ebg13_svygre}; pass("This will rot13'ed twice"); EOC -do [$fh, sub {tr/A-Za-z/N-ZA-Mn-za-m/;}] or die; +do [$fh, sub {tr/A-Za-z/N-ZA-Mn-za-m/; return;}] or die; my $count = 32; sub prepend_rot13_filter { @@ -119,4 +119,4 @@ ORTVA {cercraq_ebg13_svygre}; pass("This will rot13'ed twice"); EOC -do [$fh, sub {tr/A-Za-z/N-ZA-Mn-za-m/;}] or die; +do [$fh, sub {tr/A-Za-z/N-ZA-Mn-za-m/; return;}] or die;