Estoy tratando de entender el siguiente código. Pero no lo estoy entendiendo. Básicamente, el siguiente código actualmente verifica si existe una condición en el archivo ac o cpp.
if ($perl_version_ok && $line =~ /^\+(.*)\b($Constant|[A-Z_][A-Z0-9_]*)\s*($Compare)\s*($LvalOrFunc)/) { # Throw error }donde Constant es cualquier macro o cualquier valor constante; LvalOrFunc es cualquier variable o llamada de función; Comparar son las operaciones como !=, == ,&& , etc.
El if busca códigos como este if(CONST_VALUE == x) , donde CONST_VALUE son algunas macros. En este caso es verdadero y va dentro de la condición.
Pero quiero verificar lo contrario if(x == CONST_VALUE ) y luego arrojar un error.
Ayúdenos a comprender este fragmento de línea y cómo lograr el resultado deseado.
Nota: El código es del directorio del kernel de Linux, disponible aquí: https://github.com/torvalds/linux/blob/master/scripts/checkpatch.pl
Número de línea del código: 5483
El código no verifica if(CONST_VALUE == x) . Como se muestra en los comentarios sobre la línea en el código fuente
# comparisons with a constant or upper case identifier on the left # avoid cases like "foo + BAR < baz" # only fix matches surrounded by parentheses to avoid incorrect # conversions like "FOO < baz() + 5" being "misfixed" to "baz() > FOO + 5" busca un signo más seguido de un CONSTANT_VALUE == x . El \+ en la expresión regular coincide con un signo más.
$line =~ /^\+(.*)\b($Constant|[A-Z_][A-Z0-9_]*)\s*($Compare)\s*($LvalOrFunc)/ ^ ^ ^ ^ ^ | | | | | binding | | | word operator | | | boundary start | | of string | | plus | anythingRevertir los valores comparados debería ser fácil:
($LvalOrFunc)\s*($Compare)\s*($Constant|[A-Z_][A-Z0-9_]*)