在變量上使用常量的原因並不多。它沒有太大區別 - perl
無論如何都會編譯一個正則表達式。
例如:
#!/usr/bin/perl
use warnings;
use strict;
use Benchmark qw(:all);
use constant FOO => "foo";
use constant BAR => "bar";
my $FOO_VAR = 'foo';
my $BAR_VAR = 'bar';
sub pattern_replace_const {
my $somvar = "prefix1_foo test";
$somvar =~ s/prefix1_${\FOO}/prefix2_${\BAR}/g;
}
sub pattern_replace_var {
my $somvar = "prefix1_foo test";
$somvar =~ s/prefix1_$FOO_VAR/prefix2_$BAR_VAR/g;
}
cmpthese(
1_000_000,
{ 'const' => \&pattern_replace_const,
'var' => \&pattern_replace_var
}
);
給出:
Rate const var
const 917095/s -- -1%
var 923702/s 1% --
真的不夠的,在它的擔心。
但是它可能是值得一提的 - 你可以編譯qr//
正則表達式,做這樣的說法,這 - 提供的RE是靜態的 - 可能會提高性能(但它可能沒有,因爲Perl 可以檢測靜態正則表達式,而這是否本身
Rate var const compiled
var 910498/s -- -2% -9%
const 933097/s 2% -- -7%
compiled 998502/s 10% 7% --
有了這樣的代碼:
my $compiled_regex = qr/prefix1_$FOO_VAR/;
sub compiled_regex {
my $somvar = "prefix1_foo test";
$somvar =~ s/$compiled_regex/prefix2_$BAR_VAR/g;
}
老實說,雖然 - 這是一個微型優化的正則表達式引擎是比較快你的代碼,所以不用擔心。它。如果性能對您的代碼至關重要,那麼正確的處理方式是先寫編寫代碼,然後然後配置文件查找熱點進行優化。
我認爲常量的重點不在於它們可能比變量更快,而是它們是*常量*。 – Borodin
在我的特殊情況下,我使用的值確實是不變的。由於這個原因,我正在考慮轉向常數以及潛在的性能優勢。 – user2766918