http://www.perlmonks.org?node_id=630009


in reply to Re: Re-use of a global match
in thread Re-use of a global match

Thanks for the above replies..

Hi shmem

I added modifier /c also in the match. Please check the below code. But, still the pos() for regexp is not reset. Could you please help me how to reset the position for regexp variable using modifier
#!/usr/local/bin/perl use strict; use warnings; my $regexp = 'Perl Monks'; print "\nPos...", pos($regexp); if($regexp =~ m/^Perl Monks/gci) { print "\nFound.."; } else { print "\nNot Found.."; } print "\nPos..1.", pos($regexp); if($regexp =~ m/^Perl Monks/gi) { print "\nFound.1."; } else { print "\nNot Found.1."; }

Replies are listed 'Best First'.
Re^3: Re-use of a global match
by shmem (Chancellor) on Aug 01, 2007 at 10:43 UTC
    I added modifier /c also in the match. Please check the below code. But, still the pos() for regexp is not reset.

    which is the expected behaviour, since (perlop again):

    Options are:
    c  Do not reset search position on a failed match when /g is in effect.
    g  Match globally, i.e., find all occurrences.

    The pos() is retained in all cases until the next match is attempted, so you have to remove the /g modifier on the second match, as casiano correctly noted, which will reset pos() just before the regep engine tries to match the second time.

    --shmem

    _($_=" "x(1<<5)."?\n".q·/)Oo.  G°\        /
                                  /\_¯/(q    /
    ----------------------------  \__(m.====·.(_("always off the crowd"))."·
    ");sub _{s./.($e="'Itrs `mnsgdq Gdbj O`qkdq")=~y/"-y/#-z/;$e.e && print}