In Perl, how can I convert all newlines to spaces in a string?
perl, string
Solution
I would recommend restricting the use of `$a` and `$b` to sort routines only.
For your question, `tr///` is more appropriate than `s///`:
#!/usr/bin/perl
use strict;
use warnings;
my $x = q{dflsdgjsdg
dsfsd
gf
sgd
g
sdg
sdf
gsd};
$x =~ tr{\n}{ };
print $x, "\n";
__END__
Output:
C:\Temp> ttt
dflsdgjsdg dsfsd gf sgd g sdg sdf gsd
Update: I do not think TMTOWTDI justifies using anything other than `tr///` here. First, semantically, what the OP is asking for is transliteration and therefore it makes sense to use transliteration. Second, at least on my Windows XP laptop with 5.10, the benchmark module provides a clear contrast:
#!/usr/bin/perl
use strict;
use warnings;
use Benchmark qw( cmpthese );
use constant LONG_STRING => "\n" x 1_000_000;
cmpthese -10, {
subst => sub {
my $x = LONG_STRING;
$x =~ s{\n}{ }g;
return;
},
split_join => sub {
my $x = LONG_STRING;
$x = join ' ', split /\n/, $x;
return;
},
tr => sub {
my $x = LONG_STRING;
$x =~ tr{\n}{ };
return;
},
nop => sub {
my $x = LONG_STRING;
return;
}
};
__END__
Results:
Rate split_join subst tr nop
split_join 0.354/s -- -85% -100% -100%
subst 2.40/s 578% -- -99% -100%
tr 250/s 70514% 10320% -- -92%
nop 3025/s 854076% 125942% 1110% --
One more update: I should point out that the relative performance of `tr///` to `s///` depends on the size and composition of the source string. The case I chose for illustration here is definitely extreme. Using less extreme input strings, the performance ratio seems to be closer to `15:1` rather than `100:1` ;-)
Problem
Are there any functions are available for converting all newlines in a string to spaces? For example: ``` $a = "dflsdgjsdg dsfsd gf sgd g sdg sdf gsd"; ``` The result is am looking for is: ``` $a = "dflsdgjsdg dsfsd gf sgd g sdg sdf gsd" ```