[tpm] problems with what regex returns ... in context ?
Carlo Costantini
fifteen3 at gmail.com
Fri May 10 08:23:54 PDT 2013
Because I was following along and thought others might be following as well. I thought I would summarize
what you discovered to help you with this situation.
After looking up $+. I saw that there is also $& which has the string of the last pattern match.
So to summarize:
- a successful match with no captured data
will have a $& value defined but will not have a $+ value defined.
- a successful match with captured data
will have both $& and $+ defined but you only need to check $+
- an unsuccessful match
$& will not be defined
Thank you for "thinking aloud", Fulko.
--
Carlo
On Friday, 10 May, 2013 at 10:23 AM, Fulko Hew wrote:
> Responding to my own post...
>
> I just discovered that I can test the defined-ness
> of $+ (the 'last' extraction) because I wasn't sure
> if $1 $2... would be _also_ defined, if I specified a list to return into.
>
> hmm, yes, $n are populated regardless of the left hand side
>
> Thanks
>
>
> On Fri, May 10, 2013 at 10:16 AM, Mike Stok <mike at stok.ca (mailto:mike at stok.ca)> wrote:
> > My perl is getting a little rusty, but the first thing I thought of was to check the defined-ness of $1 e.g.
> >
> > my $line = 'this is stuff in here';
> > my @patterns = qw / stuff (stuff) stuff/;
> > foreach $regex (@patterns) {
> > my @capture = ();
> > print "regex is '$regex' ... ";
> >
> > if ((@capture = ($line =~ m/$regex/)) && defined $1) {
> > print "captured " . scalar @capture . " items \n";
> > my $i = 0;
> > foreach my $item (@capture) {
> > print " capture[$i]: '$item'\n";
> > $i++;
> > }
> > } else {
> > print "nothing captured\n";
> > }
> > }
> >
> >
> >
> > I'm sure there's some problem with that though...
> >
> > Mike
> >
> > On 2013-05-10, at 10:06 AM, Fulko Hew <fulko.hew at gmail.com (mailto:fulko.hew at gmail.com)> wrote:
> > > my $line = 'this is stuff in here';
> > > my @patterns = qw / stuff (stuff) /;
> > > foreach $regex (@patterns) {
> > > my @capture = ();
> > > print "regex is '$regex' ... ";
> > > if (@capture = ($line =~ m/$regex/)) {
> > > print "captured " . scalar @capture . " items \n";
> > > my $i = 0;
> > > foreach my $item (@capture) {
> > > print " capture[$i]: '$item'\n";
> > > $i++;
> > > }
> > > } else {
> > > print "nothing captured\n";
> > > }
> > > }
> >
> > --
> >
> > Mike Stok <mike at stok.ca (mailto:mike at stok.ca)>
> > http://www.stok.ca/~mike/
> >
> > The "`Stok' disclaimers" apply.
>
> _______________________________________________
> toronto-pm mailing list
> toronto-pm at pm.org (mailto:toronto-pm at pm.org)
> http://mail.pm.org/mailman/listinfo/toronto-pm
More information about the toronto-pm
mailing list