clueless newbie has asked for the wisdom of the Perl Monks concerning the following question:
While the following code works, it offends me because the regex on the line marked with #!!!!! captures only a single line and I'd prefer to capture everything up to the next Smart Comment. Where's my "misteak?"
#!/usr/bin/perl use Data::Dumper; use strict; use warnings; use v5.10; local $/; my $code_s=<DATA>; while ($code_s !~ m{\G$}cg) { if ($code_s =~ m{\G^(\s*###+.*\n)}cgm) { # $1 is a Smart Comment upto and including the \n warn Data::Dumper->Dump([\$1],[qw(*1)]).' '; # Since the \n was captured we don't need to bump pos($cod +e_s) #pos($code_s)++; } elsif ($code_s =~ m{\G((?:.*$)*)(?!\s*###+)}cgm) { #!!!!! # $1 only captures a single line # why not multiple lines complete with their \n? warn Data::Dumper->Dump([\$1],[qw(*1)]).' '; pos($code_s)++; } else { my $pos=pos($code_s); my $residue=substr($code_s,$pos); die 'WTF:\n'.Data::Dumper->Dump([\$pos,\$residue],[qw(*pos + *residue)]); }; }; exit; __END__ no ### yes # ### no no no #### yes
yields
$1 = \'no'; at Parse.pl line 20, <DATA> chunk 1. $1 = \' ### yes '; at Parse.pl line 14, <DATA> chunk 1. $1 = \' # ### no'; at Parse.pl line 20, <DATA> chunk 1. $1 = \'no '; at Parse.pl line 20, <DATA> chunk 1. $1 = \'no '; at Parse.pl line 20, <DATA> chunk 1. $1 = \' #### yes '; at Parse.pl line 14, <DATA> chunk 1.
Note I corrected \s###+ to \s*###+
|
---|
Replies are listed 'Best First'. | |
---|---|
Re: Regex assistance, please.
by moritz (Cardinal) on Oct 21, 2012 at 17:49 UTC | |
by clueless newbie (Curate) on Oct 21, 2012 at 17:57 UTC | |
by moritz (Cardinal) on Oct 22, 2012 at 05:04 UTC |
Back to
Seekers of Perl Wisdom