----------------------------------------------------------------- [Please enter your report here] 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. 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.