Open In App
Related Articles

Perl | ‘ee’ Modifier in Regex

Improve
Improve
Improve
Like Article
Like
Save Article
Save
Report issue
Report
In Perl, the regular expression allows performing various operations on a given string with the use of suitable operators. These operators can perform operations like modification of string, the substitution of other substrings, etc. Substitution of a substring in the given string is done with the use of ā€˜s'(substitution) operator, which takes two operands, one is the substring to be replaced and the other being the replacement string.
s/To_be_replaced/Replacement/
Modifiers in Perl are used to match a string with a specific pattern with the use of a regular expression. ‘ee’ modifier in Perl is similar to the ‘\e’ modifier. It is used to evaluate the string on the right-hand side and then further evaluate the result. It is basically the double ‘eval’ operator in Perl. ‘\e’ operator is used to evaluate the string in the right-hand side. ‘\ee’ is one step next to it. It applies the ‘\e’ operator on the string on which ‘\e’ is already applied.
 s///ee;
Just like ā€˜eā€™ modifier, ‘ee’ modifier can also be used with the ā€˜g'(globally) modifier to make the changes over all possible substrings in the given string. Example:
#!/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";

                    
Output:
Original String: Geeks $var Geeks is the best
Updated String: Geeks for Geeks is the best
In the above code, $var is printed as it is before the regex is applied on the string because it is considered as a substring of the given string and is not taken as a variable. But after the application of regex, the ‘ee’ modifier evaluates the value of $var and prints it. If we use ‘e’ modifier in the above code, then the resulting string will be same as the original string:
#!/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";

                    
Output:
Original String: Geeks $var Geeks is the best
Updated String: Geeks $var Geeks is the best
This is because when using ‘e’ modifier then the regex will consider the RHS to be the evaluated string which is to be used as a replacement, here RHS is $1 which holds $var, but not the value of it. Hence, when we use ‘ee’ modifier then it will evaluate the RHS again which holds the already eval’d value $var. Using ‘ee’ modifier with mathematical operations: If there is a mathematical expression stored in a string then while printing the string its value is not evaluated and is printed as it is. This is because it is considered as a string and as an expression to be evaluated. Example:
#!/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";

                    
Output:
The sum is 3
In the above code, the expression is written in Regex using the ‘\d+’ operator for writing one or more digits, [+*/-] character class for operator symbol, and then again a ‘\d+’ for digit. The ‘ee’ modifier evaluates the string and returns the sum of the expression which is then printed using the $1 operator. The above regex can also be stored in a subroutine to evaluate various other expressions without the need of rewriting the regex. Example:
#!/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";

                    
Output:
The sum is 3
The product is 30
In the above code, a single regex can be used to perform four mathematical operations using the subroutine.

Last Updated : 07 Jun, 2019
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads