$name = "123\n456\n789";
$name =~ s/\n.*//;
print $name;
which outputs:
123
789
If I write it in php using preg_replace , it works!
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
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
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}
Maybe so, but the PHP docs say:
".
match any character except newline (by default)"
And still:
$ cat test.php
#!/usr/bin/php
<?php echo preg_replace('/\n.*/', '', "123\n456\n789") ?>
$ ./test.php
Content-type: text/html
X-Powered-By: PHP/4.3.3
123
$