|
Prev: FAQ 9.25 How do I fetch/put an FTP file?
Next: odd chars in perldoc prior to 5.10.0 (was: Re: How to print question)
From: Duke of Hazard on 17 Apr 2008 23:23 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 18 Apr 2008 00:30 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 18 Apr 2008 00:37 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 18 Apr 2008 04:12 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 18 Apr 2008 05:45
_ 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} |