use Carp;
use strict;
use warnings;
my $page = join('',
"This is some filler.\n" x 20000,
"\n",
"This is some filler.\n" x 20000,
"\n",
"This is some filler.\n" x 20000,
"\n",
"This is some filler.\n" x 20000,
"\n",
"This is some filler.\n" x 20000);
print "Calling process_section. Length of page=[" . length($page) ."]\n";
my $newpage = process_section(\$page, {test1 => 1});
print "Done. Length of newpage=[" . length($newpage) ."]\n";
sub process_section {
my ($page, $hashref) = @_;
my $return = '';
while ($$page=~/\G(.*?)\n?/igcs) {
$return .= $1;
my $tag = $2;
my $post = pos($$page);
if ($$page=~/\G(.*?)<\/SECTION>\n?/igcs) {
$return .= $1
if exists $hashref->{$tag};
next;
}
my $excerpt = substr($$page, $post, 100);
print STDERR "\n";
Carp::carp("Warning: Unbalanced SECTION tags. Fix the template! Error near: $excerpt\n");
pos($$page) = $post;
}
$return .= substr($$page, pos($$page))
if (pos($$page) < length($$page));
return $return;
}