At 9:02 AM +0100 2/22/12, timothy adigun wrote:
On Wed, Feb 22, 2012 at 3:43 AM, John W. Krahn <jwkr...@shaw.ca> wrote:
 > s...@missionstclare.com wrote:
 >
  The line

 $text=~s/george/tim/;

 causes a global substituion of "george" with "tim"
 How can I limit the substituion to the first instance only?

 Global substitution only works if you use the /g option but your example
 does not use the /g option so it will only replace the first 'george' it
 finds.



    Correct, but sometimes this doesn't work all of the time, especially
with some very funny text files.

Could you please provide an example of where the given regular expression fails to substitute only the first instance of the matched pattern?

So, if John suggestion doesn't work as it should, then you may have to
enable slurp mode like this:
    $/=undef or local $/;
  So your code could read:

  {
     .....
     $/=undef;   ## or use local $/;
     $text=~s/george/tim/;
      ........
  }


Setting $/ will not affect the results of the substitution. It will affect reading a file, but you are not reading a file within the scope of the modified $/ variable.

You can use the File::Slurp module to read a file into a scalar variable. Also check out 'perldoc -q entire' "How can I read an entire file all at once?"


  You could check *perldoc perlvar* for more information.

We don't know if the original poster was applying the substitution to an entire file or to each line in a file. We don't even know if sb was even working with files at all.


--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to