Я рассматриваю некоторые триггеры ClearCase, написанные на Perl. Я заметил, что в некоторых регулярных выражениях переменные передаются либо напрямую, либо с именами в фигурных скобках.
Например, у меня есть следующая строка кода в триггере:
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 =~ /^(.*)_(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+';
}