Perl:长字符串转换为逗号分隔的字节列表

bro*_*an7 2 perl

我想转换ABCDEFA,B,C,D,E,F

使用Perl最快的方法是什么?

我有很多字符串要转换,字符串最长可达32768字节.所以,我想降低字符串转换的开销.

TLP*_*TLP 8

怎么样

$string =~ s/.\K(?=.)/,/g;       # using \K keep escape
$string =~ s/(?<=.)(?=.)/,/g;    # pure lookaround assertion
Run Code Online (Sandbox Code Playgroud)

要么

$string = join ",", split(//, $string);
Run Code Online (Sandbox Code Playgroud)

要找到最快的解决方案,请使用Benchmark.

额外信用:

这是我尝试的基准测试的结果.令人惊讶的是,\K逃逸比纯粹的外观快得多,这与分裂/连接的速度差不多.

use strict;
use warnings;
use Benchmark qw(cmpthese);

my $string = "ABCDEF" x 1000;

cmpthese(-1, { 
    keep       => 'my $s = $string; $s =~ s/.\K(?=.)/,/g',
    lookaround => 'my $s = $string; $s =~ s/(?<=.)(?=.)/,/g',
    splitjoin  => 'my $s = $string; $s = join ",", split(//, $string)' 
});
Run Code Online (Sandbox Code Playgroud)

输出:

                 Rate  splitjoin lookaround       keep
splitjoin   6546367/s         --        -6%       -47%
lookaround  6985568/s         7%         --       -44%
keep       12392841/s        89%        77%         --
Run Code Online (Sandbox Code Playgroud)