是否有任何函数可用于将字符串中的所有换行符转换为空格?
例如:
$a = "dflsdgjsdg
dsfsd
gf
sgd
g
sdg
sdf
gsd";
Run Code Online (Sandbox Code Playgroud)
我要找的结果是:
$a = "dflsdgjsdg dsfsd gf sgd g sdg sdf gsd"
Run Code Online (Sandbox Code Playgroud)
Sin*_*nür 14
我建议仅限制使用$a
和$b
排序例程.
对于你的问题,tr///
比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__
Run Code Online (Sandbox Code Playgroud)
输出:
C:\Temp> ttt
dflsdgjsdg dsfsd gf sgd g sdg sdf gsd
Run Code Online (Sandbox Code Playgroud)
更新:我不认为TMTOWTDI有理由使用除此之外的任何其他内容tr///
.首先,在语义上,OP要求的是音译,因此使用音译是有意义的.其次,至少在我的带有5.10的Windows XP笔记本电脑上,基准模块提供了明显的对比:
#!/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__
Run Code Online (Sandbox Code Playgroud)
结果:
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% --
Run Code Online (Sandbox Code Playgroud)
还有一个更新:我应该指出tr///
to 的相对性能s///
取决于源字符串的大小和组成.我在这里选择插图的情况绝对是极端的.使用不太极端的输入字符串,性能比似乎更接近15:1
而不是100:1
;-)
尝试以下程序:
#!/usr/bin/perl
use strict;
use warnings;
my $a = 'dflsdgjsdg
dsfsd
gf
sgd
g
sdg
sdf
gsd';
$a =~ s{\n}{ }g;
print $a;
Run Code Online (Sandbox Code Playgroud)
该程序只是使用正则表达式来搜索换行符并用全局空格替换它们.