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" ```

Original source