我刚刚找到了以substr( $str, 0, 0, $prepend )
开头的代码
my $foo = " world!"
substr( $foo, 0, 0, "Hello " );
这快于吗
my $foo = " world!"
$foo = "Hello $foo";
如果我们比较顶部的两个optree,则>]
b <@> substr[t2] vK/4 ->c - <0> ex-pushmark s ->7 7 <0> padsv[$foo:2,3] sM ->8 8 <$> const[IV 0] s ->9 9 <$> const[IV 0] s ->a a <$> const[PV "Hello "] s ->b
虽然底部有
8 <+> multiconcat(" world!",-1,7)[$foo:2,3] sK/TARGMY,STRINGIFY ->9 - <0> ex-pushmark s ->7 7 <0> padsv[$foo:2,3] s ->8
基准测试
我为此创建了一个快速基准,
use Benchmark; use strict; use warnings; sub b_multiconcat { my $foo = "world!"; $foo = "Hello $foo"; return $foo; } sub b_substr { my $foo = "world!"; substr( $foo, 0, 0, "Hello " ); return $foo; } sub b_substr_lvalue { my $foo = "world!"; substr( $foo, 0, 0 ) = "Hello "; return $foo; } unless ( b_multiconcat() eq b_substr() && b_substr() eq b_substr_lvalue() ) { die "they're not all the same"; } Benchmark::cmpthese( 100_000_000, { multiconcat => \&b_multiconcat, substr => \&b_substr, substr_valute => \&b_substr_lvalue } );
我得到的结果是,
Rate substr substr_valute multiconcat substr 7830854/s -- -18% -24% substr_valute 9606148/s 23% -- -7% multiconcat 10288066/s 31% 7% --
所以我们可以看到multiconcat节省了一些操作,并且速度稍快。说起来也似乎好很多,
$foo = "Hello $foo";