Hi,

On Wed, Feb 22, 2012 at 4:45 PM, Jim Gibson <jimsgib...@gmail.com> wrote:

> 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.
>
>
    Why Not? If your while(<>){...} is within the scope of { local $/;
....}, atleast that is what am suggesting.


> 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?"
>
>    Please, I don't mean to sound arrogant, but 'perldoc -q entire' "How
can I read an entire file all at once?" add nothing to me, because all
brian d foy mentioned is what I think any serious Perl programmer should
know.
   Agreed File::Slurp will be faster and better as Uri mentioned.

>
>
>>  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.
>

   True, but atleast we know if the 'original poster' didn't have this
problem he won't be asking. Will he?
 And if I haven't seen something 'like' that before, I won't be stating it.
  All I did, when **s/college/SCHOOL/;** wouldn't work was:
  {
     local $/;
     while(<>){
       .......
       s/college/SCHOOL/;
       ........
     }
  }
Bingo! The job was done!

-- 
Tim

Reply via email to