Reputation: 2412
I'm having problems while replacing metacharacters using regular expressions. The phrase I want the regular expressions replace the metacharacter is:
ley+sobre+propiedad+literaria+1847
And the code I use is that below:
$file =~ s/\+/\s/; # --> Replace the +
But it seems to only replace the first metacharacter and the result is:
leysobre+propiedad+literaria+1847
What shoud I use?
Upvotes: 1
Views: 89
Reputation: 57640
\s
is a character class and not a valid escape for strings. The second part of a substitution is taken as a string./g
switch on the replacement.tr///
operator.Assuming you want to replace +
by a space:
tr/+/ /;
or
s/\+/ /g;
If you want to decode URLs:
use URL::Encode 'url_decode';
my $real_filename = url_decode $file;
See the documentation for URL::Encode for further information.
Upvotes: 6
Reputation: 242103
Your problem is not connected to metacharacters. The substitution s///
replaces only the first occurrence of the pattern unless told to replace all of them by the /g
option.
BTW, \s
is interpreted as plain s
in the replacement part. If you want \s
, you have to specify \\s
to backslash the backslash (as in double quotes). Thus the output is in fact
leyssobre+propiedad+literaria+1847
Note the double s
.
Upvotes: 3