我试图匹配变量中的正则表达式匹配循环中的一些文本。
在添加 use re 'debug';
我第一次尝试就看到了
Compiling REx "^(dev|demo|stg[12])$"
Final program:
1: SBOL /^/ (2)
2: OPEN1 (4)
4: TRIE-EXACT[ds] (24)
<dev> (24)
<demo> (24)
<stg> (13)
13: ANYOF[12] (24)
24: CLOSE1 (26)
26: SEOL (27)
27: END (0)
floating ""$ at 3..4 (checking floating) anchored(SBOL) minlen 3
Matching REx "^(dev|demo|stg[12])$" against "stg1"
Run Code Online (Sandbox Code Playgroud)
这是第二次尝试。变量的regex值在此循环迭代中未更改。
Compiling REx "^(dev|demo|stg[12])$"
Matching REx "^(dev|demo|stg[12])$" against "stg1"
Run Code Online (Sandbox Code Playgroud)
这是否意味着它会第二次重新编译?还是说它会第二次编译但没有,并且正在重用已经编译过的代码?
谢谢
发布此问题后,我发现了这个问题。Perl是否缓存正则表达式生成?
因此,看起来上面的第二次尝试是缓存命中(即,它没有重新编译)。我的理解正确吗?
同样添加代码示例,这是在for循环中完成的简单匹配
for my $dbrow (@dbrows)
{
if ($dbrow->[$DB_ENV] =~ /$policy->[$PC_ENV]/
Run Code Online (Sandbox Code Playgroud)
$policy->[$PC_ENV]
是正则表达式
$policy->[$PC_ENV]
值在此循环中未更改。
$dbrow->[$DB_ENV]
价值在变化
起初,我认为perl会$policy->[$PC_ENV]
在每次迭代中重新编译,因为我看到Compiling
了每次迭代的那一行(这不是我期望的值,因为它的值没有改变),但后来我注意到它只是说了一点Compiling
,然后可能会在它的缓存,因为它不说Final program:
等
归档时间: |
|
查看次数: |
81 次 |
最近记录: |