En Perl, la expresión regular permite realizar varias operaciones en una string determinada con el uso de operadores adecuados. Estos operadores pueden realizar operaciones como la modificación de strings, la sustitución de otras substrings, etc. La sustitución de una substring en la string dada se realiza con el uso del operador ‘s’ (sustitución), que toma dos operandos, uno es la substring a ser reemplazado y el otro es la string de reemplazo.
s/To_be_replaced/Replacement/
Los modificadores en Perl se usan para hacer coincidir una string con un patrón específico con el uso de una expresión regular. El modificador ‘ee’ en Perl es similar al modificador ‘\e’. Se utiliza para evaluar la string en el lado derecho y luego evaluar más el resultado. Es básicamente el operador doble ‘eval’ en Perl. El operador ‘\e’ se usa para evaluar la string en el lado derecho. ‘\ee’ es un paso al lado. Aplica el operador ‘\e’ en la string en la que ya se aplicó ‘\e’.
s///ee;
Al igual que el modificador ‘e’, el modificador ‘ee’ también se puede usar con el modificador ‘g’ (globalmente) para realizar los cambios en todas las substrings posibles en la string dada.
Ejemplo:
#!/usr/bin/perl my $var = 'for'; # Defining the string my $String = 'Geeks $var Geeks is the best'; # String before using 'ee' modifier print "Original String: $String\n"; # Applying 'ee' modifier using regex $String =~ s/(\$\w+)/$1/ee; print "Updated String: $String";
Original String: Geeks $var Geeks is the best Updated String: Geeks for Geeks is the best
En el código anterior, $var se imprime tal como está antes de que se aplique la expresión regular en la string porque se considera una substring de la string dada y no se toma como una variable. Pero después de la aplicación de expresiones regulares, el modificador ‘ee’ evalúa el valor de $var y lo imprime.
Si usamos el modificador ‘e’ en el código anterior, la string resultante será la misma que la string original:
#!/usr/bin/perl my $var = 'for'; # Defining the string my $String = 'Geeks $var Geeks is the best'; # String before using 'e' modifier print "Original String: $String\n"; # Applying 'e' modifier using regex $String =~ s/(\$\w+)/$1/e; print "Updated String: $String";
Original String: Geeks $var Geeks is the best Updated String: Geeks $var Geeks is the best
Esto se debe a que al usar el modificador ‘e’, la expresión regular considerará que el RHS es la string evaluada que se usará como reemplazo, aquí el RHS es $1 que contiene $var, pero no su valor. Por lo tanto, cuando usamos el modificador ‘ee’, evaluará el RHS nuevamente, que contiene el valor ya evaluado $var.
Usando el modificador ‘ee’ con operaciones matemáticas:
Si hay una expresión matemática almacenada en una string, al imprimir la string, su valor no se evalúa y se imprime tal cual. Esto se debe a que se considera como una string y como una expresión a evaluar.
Ejemplo:
#!/usr/bin/perl # Mathematical expression # stored as a string $String = "1 + 2"; # Regex to evaluate the sum $String =~ s/(\d+ [+*\/-] \d+)/$1/ee; print "The sum is $String";
The sum is 3
En el código anterior, la expresión se escribe en Regex usando el operador ‘\d+’ para escribir uno o más dígitos, la clase de carácter [+*/-] para el símbolo del operador y luego nuevamente un ‘\d+’ para el dígito. El modificador ‘ee’ evalúa la string y devuelve la suma de la expresión que luego se imprime usando el operador $1.
La expresión regular anterior también se puede almacenar en una subrutina para evaluar varias otras expresiones sin necesidad de volver a escribir la expresión regular.
Ejemplo:
#!/usr/bin/perl # Subroutine to calculate regex sub Regex { $var = shift; # Regex to evaluate the sum $var =~ s/(\d+ [+*\/-] \d+)/$1/ee; return $var; } # Mathematical expression # stored as a string $String1 = "1 + 2"; $String1 = Regex($String1); print "The sum is $String1\n"; # Calculating product $String2 = "10 * 3"; $String2 = Regex($String2); print "The product is $String2";
The sum is 3 The product is 30
En el código anterior, se puede usar una sola expresión regular para realizar cuatro operaciones matemáticas usando la subrutina.