Я просматриваю триггеры 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+';
}
ОК, так что я лучше использовать $ {переменная} все время, а затем. Нет? –
Я предлагаю только там, где это необходимо - вы должны знать имена своих переменных, поэтому, если они вызовут конфликт, тогда сделайте это. Делать это повсюду может быть шумно –
ОК, спасибо! Я получил ответы. :-) –