You are reading the file into @prep, but are not really searching @prep for the pattern.
$tag =~ m/<!--..? -->/;
This line searches for the pattern in the variable $tag, which may or may not have been defined (considering it is a global, not a lexically scoped, variable).
Consider the following instead:
$page = join "", @prep; # since the lines are in an array
if (my ($tag) = $page =~ m/<!--(.+) -->/) {
# call the appropriate sub based on the tag
if ($tag eq 'a') {
suba; exit;
} elsif ($tag eq 'b') {
subb; exit;
} # ...etc...
}
I have not attempted above to change your algorithm or data structure, although I would use a hash containing references to the subroutines, like:
my $subs = {
a => \&suba,
b => \&subb,
# etc.
}
if ($subs->{$tag}) {
$subs->{$tag}->();
} else {
warn "Unknown tag <$tag> in file <$prepage>\n";
}
Also, I would not read the whole file at once, but instead:
my $tag;
while (<PAGE>) {
if (m/<!--(.+) -->/) {
$tag = $1;
last; # assuming there is only one tag in each file
}
}
close <PAGE>;
# proceed to call the tag handler
HTH,
/prakash
-
Are you posting in the right place? Check out Where do I post X? to know for sure.
-
Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
<code> <a> <b> <big>
<blockquote> <br /> <dd>
<dl> <dt> <em> <font>
<h1> <h2> <h3> <h4>
<h5> <h6> <hr /> <i>
<li> <nbsp> <ol> <p>
<small> <strike> <strong>
<sub> <sup> <table>
<td> <th> <tr> <tt>
<u> <ul>
-
Snippets of code should be wrapped in
<code> tags not
<pre> tags. In fact, <pre>
tags should generally be avoided. If they must
be used, extreme care should be
taken to ensure that their contents do not
have long lines (<70 chars), in order to prevent
horizontal scrolling (and possible janitor
intervention).
-
Want more info? How to link
or How to display code and escape characters
are good places to start.