正则表达式 – 在使用$variable和${variable}之间传递正则表达式中的变量时Perl有什么区别

前端之家收集整理的这篇文章主要介绍了正则表达式 – 在使用$variable和${variable}之间传递正则表达式中的变量时Perl有什么区别前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在审查一些用Perl编写的ClearCase触发器.我注意到在一些正则表达式中,变量既可以直接传递,也可以用大括号中的名称传递.

例如,我在触发器中有以下代码行:

  1. if ($baseline !~ /^${component}_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&
  2. $baseline !~ /^${project_root}_$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/)

$component,$phase,$automateddigit,$project_root都是变量.

为什么有些传递为$variable而其他传递为正则表达式中的${variable}?

它是否来自它们的初始化方式?

以下是初始化它们的代码行:

  1. ($project = $ENV{CLEARCASE_PROJECT}) =~ s/\@.*$//;
  2. ($component = $ENV{CLEARCASE_COMPONENT}) =~ s/\@.*$//;
  3.  
  4. ($project_root,$phase) = ($project =~ /^(.*)_(R\d+.*)$/);
  5.  
  6. exit(0) if (! $phase);
  7.  
  8. $phase .= ".0" if ($phase =~ /^R\d+$/);
  9.  
  10. $automateddigit = '';
  11.  
  12. $istream = `cleartool desc -fmt "%[istream]p" project:$ENV{CLEARCASE_PROJECT}`;
  13.  
  14. $componentlist = `cleartool desc -fmt "%[components]Cp" stream:$ENV{CLEARCASE_STREAM}`;
  15. $componentsnbr = split(',',$componentlist);
  16.  
  17. if ($componentsnbr > 1) {
  18. $automateddigit .= '\\.\\d+';
  19. }
如果将变量作为${name}传递,则会明确界定变量名称的结尾位置,以及引用字符串的其余部分的开始位置.例如,在您的代码中:
  1. if ($baseline !~ /^${component}_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&

没有{}分隔符:

  1. if ($baseline !~ /^$component_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&

请注意,由于正则表达式中的尾随下划线,变量$component(您可以以任何方式引用它)将被误解为$component_.

猜你在找的正则表达式相关文章