Beefy Boxes and Bandwidth Generously Provided by pair Networks
The stupid question is the question not asked
 
PerlMonks  

s/PATTERN/func()/em leaks /m into func()

by jesuashok (Curate)
on Apr 21, 2006 at 11:30 UTC ( #544852=perlquestion: print w/ replies, xml ) Need Help??
jesuashok has asked for the wisdom of the Perl Monks concerning the following question:

Hi all,

The following subroutine returns its argument with any leading newlines removed:

sub xxx { my $s = shift; $s =~ s/^\n+//; $s; }
However, if this function is called from the replacement part of a s///em, the /m semantics is carried over, and internal newlines will be deleted.
#!/usr/bin/perl use strict; use warnings; no warnings qw /syntax/; use Test::More tests => 1; # # Delete any leading newlines. # sub xxx { my $s = shift; $s =~ s/^\n+//; $s; } my $a = "A\n\nB"; $a =~ s/([\s\w]+)/xxx $1/e; my $b = "A\n\nB"; $b =~ s/([\s\w]+)/xxx $1/em; is ($b, $a); __END__ 1..1 not ok 1 # Failed test (eep at line 21) # got: 'A # B' # expected: 'A # # B' # Looks like you failed 1 test of 1.

"Keep pouring your ideas"

2006-10-07 Unapproved by planetscape once evidence of habitual plagiarism uncovered.

Comment on s/PATTERN/func()/em leaks /m into func()
Select or Download Code
Re: s/PATTERN/func()/em leaks /m into func()
by ashokpj (Hermit) on Apr 21, 2006 at 11:56 UTC

    Problem in \n in search and replace.

    '\n' is a special character so use \\n <code> $s =~ s/^\\n+//; <\code>

Re: s/PATTERN/func()/em leaks /m into func()
by japhy (Canon) on Apr 21, 2006 at 12:23 UTC
    Yeah, this is a bug. You can't even turn it off with s/(?-m:^\n+)//. Report it with the 'perlbug' program that comes with Perl. I'd use the contents of your node as the message, I don't think anything more is necessary.

    Jeff japhy Pinyan, P.L., P.M., P.O.D, X.S.: Perl, regex, and perl hacker
    How can we ever be the sold short or the cheated, we who for every service have long ago been overpaid? ~~ Meister Eckhart
Re: s/PATTERN/func()/em leaks /m into func()
by diotalevi (Canon) on Apr 21, 2006 at 12:51 UTC

    Hey! Your last two SoPW questions were reported on p5p days prior to your perlmonks post. Are you just forwarding p5p stuff to perlmonks or what?

    ⠤⠤ ⠙⠊⠕⠞⠁⠇⠑⠧⠊

      I'm kind of ambivalent on the issue ... on one hand, I don't read p5p. So news of new interpreter bugs is actually interesting to me. And, I imagine, quite a number of monks.

      On the other hand, I can see the argument that if we want to know what's going on with p5p, we should just subscribe to it. Doesn't cost anything.

      Finally, I suppose the question is largely of relevancy. If these really are simply reposts (definite possibility, but so far two can just be ascribed to freakish coincidence), how relevant are they to the average monk who may not be subscribed to p5p? If you're referring to jesuashok's last and third last (as of this moment) posts (his previous SoPW is 'my' with 'if 0' retains old value, which probably wasn't on p5p as it has been beaten to death already), I would kind of lean towards "of little interest." If they are honestly things he found, which that intervening SoPW is somewhat evidence of, then relevancy to everyone (but him) is irrelevent - they are fine.

      It is kinda freakish if two of the last three SoPWs are ripped from p5p, though. Still a strong coincidence. I would highly encourage the OP to say where he's getting this stuff from if he is ripping it from p5p. Perhaps he wants better explanations than p5p is giving (since p5p is probably more geared towards those who have a good understanding of the inner workings of the interpreter). That's fine, too - just say so.

      As diotalevi discovered, the OP was directly plagiarized from this site, which has a date of July 6, 2005:
      ----------------------------------------------------------------- [Please enter your report here] The following subroutine returns its argument with any leading newline +s removed: sub xxx { my $s = shift; $s =~ s/^\n+//; $s; } However, if this function is called from the replacement part of a s///em, the /m semantics is carried over, and internal newlines will be deleted. I've confirmed the bug to be present in 5.000, 5.004_0[45], 5.005_0x, 5.6.x and 5.8.x, including 5.8.7. However, the bug isn't present in any of the 5.9.x versions of perl. Full test: #!/usr/bin/perl use strict; use warnings; no warnings qw /syntax/; use Test::More tests => 1; # # Delete any leading newlines. # sub xxx { my $s = shift; $s =~ s/^\n+//; $s; } my $a = "A\n\nB"; $a =~ s/([\s\w]+)/xxx $1/e; my $b = "A\n\nB"; $b =~ s/([\s\w]+)/xxx $1/em; is ($b, $a); __END__ 1..1 not ok 1 # Failed test (eep at line 21) # got: 'A # B' # expected: 'A # # B' # Looks like you failed 1 test of 1.

      Update::  

              (his previous SoPW is 'my' with 'if 0' retains old value, which probably wasn't on p5p as it has been beaten to death already),

      Guess again ... Re: 'my' with 'if 0' retains old value, points to the p5p site from which jesuashok plagiarized it.


      s''(q.S:$/9=(T1';s;(..)(..);$..=substr+crypt($1,$2),2,3;eg;print$..$/
Re: s/PATTERN/func()/em leaks /m into func()
by blazar (Canon) on Apr 21, 2006 at 13:08 UTC

    Interesting! Did you try with (?imsx-imsx:pattern)? See perldoc perlre for more info.

Log In?
Username:
Password:

What's my password?
Create A New User
Node Status?
node history
Node Type: perlquestion [id://544852]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this? | Other CB clients
Other Users?
Others making s'mores by the fire in the courtyard of the Monastery: (5)
As of 2014-12-22 05:54 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    Is guessing a good strategy for surviving in the IT business?





    Results (110 votes), past polls