正则表达式 – 在使用$variable和${variable}之间传递正则表达式
发布时间:2020-12-13 22:53:25 所属栏目:百科 来源:网络整理
导读:我正在审查一些用Perl编写的ClearCase触发器.我注意到在一些正则表达式中,变量既可以直接传递,也可以用大括号中的名称传递. 例如,我在触发器中有以下代码行: if ($baseline !~ /^${component}_(|.*_)$phase.d+(|[a-z]|-d+|${automateddigit})$/ $baselin
我正在审查一些用Perl编写的ClearCase触发器.我注意到在一些正则表达式中,变量既可以直接传递,也可以用大括号中的名称传递.
例如,我在触发器中有以下代码行: if ($baseline !~ /^${component}_(|.*_)$phase.d+(|[a-z]|-d+|${automateddigit})$/ && $baseline !~ /^${project_root}_$phase.d+(|[a-z]|-d+|${automateddigit})$/) $component,$phase,$automateddigit,$project_root都是变量. 为什么有些传递为$variable而其他传递为正则表达式中的${variable}? 它是否来自它们的初始化方式? 以下是初始化它们的代码行: ($project = $ENV{CLEARCASE_PROJECT}) =~ s/@.*$//; ($component = $ENV{CLEARCASE_COMPONENT}) =~ s/@.*$//; ($project_root,$phase) = ($project =~ /^(.*)_(Rd+.*)$/); exit(0) if (! $phase); $phase .= ".0" if ($phase =~ /^Rd+$/); $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+'; }
如果将变量作为${name}传递,则会明确界定变量名称的结尾位置,以及引用字符串的其余部分的开始位置.例如,在您的代码中:
if ($baseline !~ /^${component}_(|.*_)$phase.d+(|[a-z]|-d+|${automateddigit})$/ && 没有{}分隔符: if ($baseline !~ /^$component_(|.*_)$phase.d+(|[a-z]|-d+|${automateddigit})$/ && 请注意,由于正则表达式中的尾随下划线,变量$component(您可以以任何方式引用它)将被误解为$component_. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |