#!/usr/bin/perl
$tempstr = qq`
[IF a = /1/
1
ELSIF b = /2/
2
ELSE
3
]
`;
my $reg = qr{\[(?:(?>[^\[\]]+)|(??{$reg}))*\]};
$tempstr =~ s/\[(?:IF|ELSIF|ELSE)(\s+\S+\s*\=\s*.*?)?\n((?:$reg|\n|[^\[\]])+\])/iffer($1,$2)/ges;
sub iffer {
my $test = shift;
$test .= shift;
print "trying iffer... test: $test\n";
my $reg = qr{\[(?:(?>[^\[\]]+)|(??{$reg}))*\]};
$test =~ s/(?:(?:$reg|\n|[^\[\]])+?)(^(?:ELSIF|ELSE\s*\n).*\]|\])/\[$1/sm;
return $test;
}
####
$ ./t.pl
trying iffer... test: a = /1/1
ELSIF b = /2/
2
ELSE
3
]
$
####
#!/usr/bin/perl
$tempstr = qq`
[IF a = /1/
1
ELSIF b = /2/
2
ELSE
3
]
`;
my $reg = qr{\[(?:(?>[^\[\]]+)|(??{$reg}))*\]};
while ($tempstr =~ s/\[(?:IF|ELSIF|ELSE)(\s+\S+\s*\=\s*.*?)?\n((?:$reg|\n|[^\[\]])+\])/iffer($1,$2)/ges) {}
sub iffer {
my $test = shift;
$test .= shift;
print "trying iffer... test: $test\n";
my $reg = qr{\[(?:(?>[^\[\]]+)|(??{$reg}))*\]};
$test =~ s/(?:(?:$reg|\n|[^\[\]])+?)(^(?:ELSIF|ELSE\s*\n).*\]|\])/\[$1/sm;
return $test;
}
####
$ ./t.pl
trying iffer... test: a = /1/1
ELSIF b = /2/
2
ELSE
3
]
trying iffer... test: b = /2/2
ELSE
3
]
trying iffer... test: 3
]
$