suboptimal, but works correctly for all input files below.
#-------------------------------
return unless wantarray;
return unless $$buf_ref =~ /./;
return (${$buf_ref} =~ /.*?(?:$sep{2}|\z)/gs) if $paragraph_mode;
return (${$buf_ref} =~ /.*?(?:$sep|\z)/gs );
#-------------------------------
test input files generated as follows:
perl -e 'print' >empty
#NOTE: para 2 begins with a newline below, para3 has no $/ at end
perl -e "print qq{\nPara1\n\n\nPara2\n\nPara3_NOEND}" >para_test
perl -le 'print for map { "line$_" } 0..5' >5lines
-- Ramki
On Fri, Sep 17, 2004 at 02:05:52AM -0400, Uri Guttman wrote:
>
> in file::slurp i currently split the file into lines (or records based
> on $/) using this code:
>
> return split( m|(?<=$sep)|, ${$buf_ref} ) if wantarray ;
>
> where $sep is set from $/.
>
> that works correctly and is fast. but it has one flaw, it can't do
> paragraph mode since lookbehind can't handle variable width regexes as
> \n\n+ is. so i am looking for an m// solution that properly splits a
> buffer into records. it is not as easy as it seems. it has to behave
> exactly like the split does. there are several corner cases such as an
> empty file and a partial line ending a file. even a normal file of lines
> is tricky as you don't want to return an bogus empty line after the last
> real line. here are a few broken attempts to help you avoid pitfalls:
>
> /(.*?$sep|.+)/sg # doesn't handle an empty file
> /.*?(?:$sep|\z)/gs # adds a bogus empty line at the end
>
> i already passed this problem to a top regex person and he sent me the
> second one above (obviously untested! :).
>
> so fame, glory and an acknowledgement in the new release all go to the
> valiant warrior who solves this.
>
> let the fl^Wgames begin!
>
> uri
>
> --
> Uri Guttman ------ [EMAIL PROTECTED] -------- http://www.stemsystems.com
> --Perl Consulting, Stem Development, Systems Architecture, Design and Coding-
> Search or Offer Perl Jobs ---------------------------- http://jobs.perl.org
--
----------------------------------------------------------------
Let us see how high we can fly before the sun melts the wax
in our wings. -- Subrahmanyam Chandrasekhar