Beefy Boxes and Bandwidth Generously Provided by pair Networks
There's more than one way to do things

Re: Re: Matching over multiple lines in a scalar

by thpfft (Chaplain)
on Oct 27, 2002 at 23:18 UTC ( #208400=note: print w/replies, xml ) Need Help??

in reply to Re: Matching over multiple lines in a scalar
in thread Matching over multiple lines in a scalar

Why use negative-width assertions, when you're already using the /m flag?

To catch the broken lines. Yours is a very elegant construction, which I intend to steal, but I don't think that snippet meets the original requirements as it is. if you knew the tags wouldn't contain numerals, which I doubt, you could change it to:

my $info = do { local $/; <DATA> }; my %lines = $info =~ /(\d+): ([^\d]+)/gs;

but otherwise I can't see an alternative to the (?:^|\n).

btw, is there any way to catch the matched values during a split? it would make this nice and tidy.

update: damnation. redundant again.

another update: I couldn't resist shrinking gjb's cheaper version and introducing a useful but quite unrequested array reference:

my ($key, %data); for (<DATA>) { /^(?:(\d+):\s*)*(.+)$/; push @{ $data{ $key = $1 || $key } }, $2; }

Replies are listed 'Best First'.
Re: Re: Re: Matching over multiple lines in a scalar
by BrowserUk (Pope) on Oct 27, 2002 at 23:48 UTC

    Take it one step further still and do away with the temporary scalar. This works.

    my %lines = do{local$/; <DATA> = ~m/(?:^|\n)(\d+)\:(.+?)(?=(?:\n\d)|$) +/gs };

    Now I'll wait for sauoq to reduce the regex to 3 chars and a twiddle and we've got a golf solution.:^)

    Nah! Your thinking of Simon Templar, originally played by Roger Moore and later by Ian Ogilvy

      after a tactful /msg from chromatic, i can confirm that this works too, provided the data are very tidy indeed.

      (i wish someone would redefine data as the mass noun it surely is, then I could stop pedantically pluralising around it.)

      my (undef, %lines) = split(/(\d+): /, join('', <DATA>));

      ugly, fragile and unwise, but you know, short.

Log In?

What's my password?
Create A New User
Node Status?
node history
Node Type: note [id://208400]
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others having an uproarious good time at the Monastery: (4)
As of 2021-05-13 23:15 GMT
Find Nodes?
    Voting Booth?
    Perl 7 will be out ...

    Results (145 votes). Check out past polls.