From: Duke of Hazard on
I can not figure out why this is not printing just 123:

$name = "123\n456\n789";

$name =~ s/\n.*//;

print $name;

which outputs:

123
789

If I write it in php using preg_replace , it works!

From: John W. Krahn on
Duke of Hazard wrote:
> I can not figure out why this is not printing just 123:
>
> $name = "123\n456\n789";
>
> $name =~ s/\n.*//;
>
> print $name;
>
> which outputs:
>
> 123
> 789

That is because . matches any character *except* newline. If you want
it to match a newline as well then you have to use the /s option:

$name =~ s/\n.*//s;


John
--
Perl isn't a toolbox, but a small machine shop where you
can special-order certain sorts of tools at low cost and
in short order. -- Larry Wall
From: Eric Amick on
On Thu, 17 Apr 2008 20:23:23 -0700 (PDT), Duke of Hazard
<squash(a)peoriadesignweb.com> wrote:

>I can not figure out why this is not printing just 123:
>
>$name = "123\n456\n789";
>
>$name =~ s/\n.*//;
>
>print $name;
>
>which outputs:
>
>123
>789
>
>If I write it in php using preg_replace , it works!

By default, '.' in Perl regexes does not match newline. If you want it
to match newline, use

$name =~ s/\n.*//s;

I don't know PHP, but it surprises me that it handles that case
differently.
--
Eric Amick
Columbia, MD
From: Gunnar Hjalmarsson on
Eric Amick wrote:
> On Thu, 17 Apr 2008 20:23:23 -0700 (PDT), Duke of Hazard
> <squash(a)peoriadesignweb.com> wrote:
>
>> I can not figure out why this is not printing just 123:
>>
>> $name = "123\n456\n789";
>>
>> $name =~ s/\n.*//;
>>
>> print $name;
>>
>> which outputs:
>>
>> 123
>> 789
>>
>> If I write it in php using preg_replace , it works!
>
> By default, '.' in Perl regexes does not match newline. If you want it
> to match newline, use
>
> $name =~ s/\n.*//s;
>
> I don't know PHP, but it surprises me that it handles that case
> differently.

A bug in PHP?

--
Gunnar Hjalmarsson
Email: http://www.gunnar.cc/cgi-bin/contact.pl
From: Abigail on
_
Gunnar Hjalmarsson (noreply(a)gunnar.cc) wrote on VCCCXLIV September
MCMXCIII in <URL:news:66r3c2F2h2crbU1(a)mid.individual.net>:
~~ Eric Amick wrote:
~~ > On Thu, 17 Apr 2008 20:23:23 -0700 (PDT), Duke of Hazard
~~ > <squash(a)peoriadesignweb.com> wrote:
~~ >
~~ >> I can not figure out why this is not printing just 123:
~~ >>
~~ >> $name = "123\n456\n789";
~~ >>
~~ >> $name =~ s/\n.*//;
~~ >>
~~ >> print $name;
~~ >>
~~ >> which outputs:
~~ >>
~~ >> 123
~~ >> 789
~~ >>
~~ >> If I write it in php using preg_replace , it works!
~~ >
~~ > By default, '.' in Perl regexes does not match newline. If you want it
~~ > to match newline, use
~~ >
~~ > $name =~ s/\n.*//s;
~~ >
~~ > I don't know PHP, but it surprises me that it handles that case
~~ > differently.
~~
~~ A bug in PHP?


It would do what the OP intended in Perl6 as well.


Abigail
--
tie $" => A; $, = " "; $\ = "\n"; @a = ("") x 2; print map {"@a"} 1 .. 4;
sub A::TIESCALAR {bless \my $A => A} # Yet Another silly JAPH by Abigail
sub A::FETCH {@q = qw /Just Another Perl Hacker/ unless @q; shift @q}