Ich überprüfe einige ClearCase-Trigger in Perl geschrieben. Ich habe bemerkt, dass Variablen in einigen regulären Ausdrücken entweder geradlinig oder mit ihren Namen in geschweiften Klammern übergeben werden.
Zum Beispiel habe ich die folgende Codezeile in einem Trigger:
if ($baseline !~ /^${component}_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&
$baseline !~ /^${project_root}_$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/)
$component
, $phase
, $automateddigit
, $project_root
alle Variablen.
Warum werden einige als $variable
und andere als ${variable}
im regulären Ausdruck übergeben?
Kommt es darauf an, wie sie initialisiert werden?
Hier sind die Codezeile sie initialisiert:
($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+';
}
OK, so dass ich besser nutzen $ {variable} die ganze Zeit, dann. Nein ? –
Ich schlage nur vor, wo es nötig ist - Sie sollten sich der Namen Ihrer Variablen bewusst sein, wenn sie einen Konflikt verursachen würden, dann tun Sie es. Es kann überall laut sein –
OK, Danke! Ich habe meine Antworten bekommen. :-) –