bon, je sais d'ou vient ton souci, je viens de tester le script.
1- La regex est OK
1 2 3 4 5 6 7
| my @define = $CodeFichierC =~ m{
^\s* # La ligne commence par un espace ou non
\#define # suivi de #define
\s* # espace ou non
([^\n]+)\s* # contenu define
\n # se termine par un retour chariot
}mgix; |
2- Le souci est au niveau du split
1 2 3 4 5 6
| # Dans le hash, la cle sera le nom d'un define et la valeur celle du define.
my %VariableDefine;
foreach my $Define (@define) {
my ( $var, $value ) = split( /\s+/, $Define );
$VariableDefine{$var} = $value || '';
} |
On supposait que les define allaient toujours être du style
#define NOM_VARIBALE_SANS_ESPACE VALEUR_SANS_ESPACE
Du coup, le split coupait en fonction des espaces et on pouvait donc stocker dans $var NOM_VARIABLE_SANS_ESPACE et dans $value VALEUR_SANS_ESPACE.
Or dans ce cas particulier, VALEUR_SANS_ESPACE a des espaces.
ICCIS_CARD_STATUS_FLD ((DWORD)(1UL << 0))
en rouge, c'est $var et en bleue $value
Pour éviter ce genre de souci, on va dire à Perl de couper en 2 morceaux maximum et on sera sûr qu'il y ait tout dans $value
my ( $var, $value ) = split( /\s+/, $Define, 2 );
Et maintenant, tout est OK
Partager