Pour pouvoir naviguer au sein du source de projets complexes, ceux pour lesquels le système de gestion de configuration joue un rôle fondamental, il est nécessaire de créer nombre de 'variables' pour tenter d'imiter le comportement du compilateur relatif aux inclusions de fichiers.

Un grand nombre de variables débouche sur un en-tête de page encombré (d'autant plus avec l'interface link). Très souvent, toutes les variables ne sont pas significatives en même temps: beaucoup ne font sens que lorqu'une autre a une certaine valeur. Il est alors possible de construire un arbre de dépendance.

À partir de la version 1.0, les relations de cet arbre de dépendance peuvent être traduites dans la définition des 'variables'. La relation s'exprime par une clause 'when' qui provoque le non-affichage de la variable si la relation n'est pas satisfaite. Ceci contribue à améliorer la lisibilité de l'en-tête.

, 'variables' => { var_id => { 'name' => titre_a_afficher , 'when' => expression_conditionnelle , 'range' => [qw( … )] , 'default' => valeur_par_defaut } }

expression_conditionnelle est une expression "logique" portant sur des chaînes et ayant pour résultat vrai ou faux. Pour être utile, elle doit référencer d'autres variables sous la forme "$var_id".

Les guillemets autour de la demande de substitution de variable sont obligatoires. Le travail s'effectue en deux étapes. D'abord, la valeur de la variable remplace $var_id. Ensuite, l'expression résultante est évaluée. Sans les guillemets, la valeur substituée n'est pas considérée comme une chaîne mais comme un bare word, ce qui conduit à une erreur de syntaxe Perl.

Example:

, 'a' => { 'name' => 'Target architecture' , 'range' => [qw(x86 arm ppc m68k)] } , 'arm_mach' => { 'name' => 'ARM models' , 'when' => '"$a" eq "arm"' , 'range' => [qw(at91 bcmring clps711x davinci)] }

Les opérateurs de comparaison disponibles sont eq et ne, pas == and != qui travaillent sur des nombres.

Les variables'when' (conditionnelles) sont des variables ordinaires. Elles n'acquièrent aucune propriété sémantique supplémentaire du fait de 'when'. Elles sont seulement cachées quand leur clause 'when' aboutit à faux. Même dans ce cas, elles gardent leur dernière valeur.

Transformer la variable v de sélection de version en variable conditionnelle n'a aucun sens car elle est TOUJOURS valide.

Pour des exemples sophistiqués d'usage de variables conditionnelles, voir les Trucs et astuces consacrés à certains logiciels.