Monks, i have some question in regex. Today when i was doing simple clean up work in xml file, i got the following error. But i was surprised to see that i don't find any error in the code. When i enclosed that character class in the bracket, i am not getting any error. Below i have placed a part of the code and sample input string. This is the first time i am facing such error. Is it my mistake in the code or some other issue behind it? Could anyone explain where am i going wrong.
The error i am getting: syntax error at D:\testing\pract.pl line 14, near "[^" Execution of D:\testing\pract.pl aborted due to compilation errors.
use strict;
use warnings;
my %imlre = ('RE1' => ['RE1', 'body', 'measure', 'remove'], 'RE2' => ['RE2', 'jcode', '', 'remove']);
my $input = 'front matter comes here bodymatter comes hereback matter ';
for (keys %imlre)
{
if ($imlre{$_}->[3] =~ /^remove$/i)
{
$input =~ s/<$imlre{$_}->[1][^>]*>//g ; #here getting error
#$input =~ s/<$imlre{$_}->[1]([^>]*)>//g ; #here no error
}
}
print $input;
Prasad
my $s = $imlre{$_}->[1];
$input =~ s/<$s[^>]*>//g ;
Adding a space between two [] worked fine for me. This may be due to the fact that perl tries to parse the second '[]' as extra dimension.
Monks, if wrong please correct me.
use strict;
use warnings;
my %imlre = ('RE1' => ['RE1', 'body', 'measure', 'remove'], 'RE2' => [
+'RE2', 'jcode', '', 'remove']);
my $input = 'front matter comes here bodymatter co
+mes hereback matter ';
for (keys %imlre)
{
if ($imlre{$_}->[3] =~ /^remove$/i)
{
$input =~ s/<$imlre{$_}->[1] [^>]*>//xg ; #here getting error
#$input =~ s/<$imlre{$_}->[1]([^>]*)>//g ; #here no error
}
}
print $input;
Regards,
Murugesan Kandasamy
use perl for(;;);
perlmonks.org content © perlmonks.org and codeacrobat, davidrw, holli, ikegami, murugu, prasadbabu
prlmnks.org © 2006 edmund von der burg (eccles & toad)
v 0.03