Quoting timothy adigun <2teezp...@gmail.com>:
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
I am changing entire files.
I maintain missionstclare.com. I can create the daily files from Perl
scripts (and I do). Example at
http://www.missionstclare.com/english/March/morning/01m.html
But, to create the stripped-down versions of the same files (example
at
http://www.missionstclare.com/english/March/whole/morning/01m.html), I
have to remove a great amount of stuff from the original daily files.
Like Tim, I've been using while(<>); but, from this discussion, I
suspect that while(<>) is the problem.
I've never used Slurp.
--
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/