Tho*_*iol 6 regex syntax perl triggers clearcase
我正在审查一些用Perl编写的ClearCase触发器.我注意到在一些正则表达式中,变量既可以直接传递,也可以用大括号中的名称传递.
例如,我在触发器中有以下代码行:
if ($baseline !~ /^${component}_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&
$baseline !~ /^${project_root}_$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/)
Run Code Online (Sandbox Code Playgroud)
$component,$phase,$automateddigit,$project_root都是变数.
为什么有些像正则表达式$variable一样传递${variable}了?
它是否来自它们的初始化方式?
以下是初始化它们的代码行:
($project = $ENV{CLEARCASE_PROJECT}) =~ s/\@.*$//;
($component = $ENV{CLEARCASE_COMPONENT}) =~ s/\@.*$//;
($project_root, $phase) = ($project =~ /^(.*)_(R\d+.*)$/);
exit(0) if (! $phase);
$phase .= ".0" if ($phase =~ /^R\d+$/);
$automateddigit = '';
$istream = `cleartool desc -fmt "%[istream]p" project:$ENV{CLEARCASE_PROJECT}`;
$componentlist = `cleartool desc -fmt "%[components]Cp" stream:$ENV{CLEARCASE_STREAM}`;
$componentsnbr = split(',', $componentlist);
if ($componentsnbr > 1) {
$automateddigit .= '\\.\\d+';
}
Run Code Online (Sandbox Code Playgroud)
如果将变量作为$ {name}传递,则会明确界定变量名称的结尾位置,以及引用字符串的其余部分的开始位置.例如,在您的代码中:
if ($baseline !~ /^${component}_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&
Run Code Online (Sandbox Code Playgroud)
没有{}分隔符:
if ($baseline !~ /^$component_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&
Run Code Online (Sandbox Code Playgroud)
请注意,由于正则表达式中的尾随下划线,变量$ component(您可以以任何方式引用它)将被误解为$ component_.
| 归档时间: |
|
| 查看次数: |
533 次 |
| 最近记录: |