Philip Potter wrote:
> 2009/12/22 Parag Kalra <paragka...@gmail.com>:
>> You can try following:
>>
>> $_ =~ s/^\.(\s)+//g;
> 
> This isn't quite right.
> 
> There are two ways in which you might use this substitution: either $_
> will contain a single line, or it will contain multiple lines. The
> single line case might look something like this:
> 
> while (<>) {
>     s/^\.(\s)+//g;
>     print;
> }
> 
> In this case, however, the /g modifier is redundant and confusing,
> since you only want the regex to match once at the start of each line.
> Take the /g modifier off.
> 
> The multiple line case might look like this:
> 
> $_ = do {local $/; <>;}; # but better to use File::Slurp
> s/^\.(\s)+//g;
> print;
> 
> This code is broken. The problem is that ^ matches start-of-string,
> not start-of-line. Therefore, even with the /g modifier the regex can
> only match at the beginning of the string, and so will only match
> once.
> 
> To change ^ to match start-of-line, you need the /m modifier:
> 
> s/^\.(\s)+//gm;
> print;
> 
> Perl Best Practices makes the interesting recommendation that all
> regexes should use the /m modifier, because having ^$ match line
> boundaries seems to be what most programmers expect and seems to be
> useful much more often. If you still need to match start and end of
> string you can use \A and \z.
> 
> Phil
> 

I should point out that this may not work.  Text in question seems to be
UTF-8.  If so, this should be added before any input:

use utf8;
binmode ARGV, ':encoding(utf8)';


-- 
Just my 0.00000002 million dollars worth,
  Shawn

Programming is as much about organization and communication
as it is about coding.

I like Perl; it's the only language where you can bless your
thingy.

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