rsriram has asked for the wisdom of the Perl Monks concerning the following question:

Hi, I am using Perl6::Junction to search a element from a array. I have a markup file, in which I am collecting all the tags and checking it against a array of all permitted tags.

The array of permitted tags is:
my @tags=(qw(ct sect1 sect2 sect3 sect4 sect5 sect6));

The regular expression and the test to search the array goes like:

$file=$_; while(<F1>) { $file =~ /<([^>].+)>/g; die "Incorrect entry $1\n" unless grep { $_ eq $1 } @tags; }

On execution, (even though I have used use Perl6::Junction; in the program), get a output as

Incorrect entry <ct>Defining Marketing for the 21st Century

"<ct>Defining Marketing for the 21st Century" is the first line in my text file, which needs to be processed.

Could anyone help me by telling what went wrong?

20060707 Janitored by Corion: Cleaned formatting of code tags, as per Writeup Formatting Tips

Replies are listed 'Best First'.
Re: Using Perl6::Junction for searching a element in a array
by Corion (Patriarch) on Jul 06, 2006 at 11:12 UTC

    The lines you read from F1 go into $_ and not into $file. You check the wrong variable and/or you print the wrong error message.

    I would rewrite your code as:

    my $file = $_; my @tags=(qw(ct sect1 sect2 sect3 sect4 sect5 sect6)); my %allowed_tag = map { $_ => 1 } @tags; while (defined (my $line = <F1>)) { $line =~ /<([^>].+)>/ or die "Couldn't extract a tag from >>$line<<"; my $tag = $1; die "Incorrect entry >>$tag<< in >>$line<<" unless exists $allowed_tag{$tag}; print "Found tag $tag"; };
Re: Using Perl6::Junction for searching a element in a array
by Moron (Curate) on Jul 06, 2006 at 11:33 UTC
    The code above explains the output perfectly. I think you really mean something more like:
    while(<F1>) my $ok = 0; for my $tag ( @tags ) $ok = /^\s*(\<$tag\>)(.*)$/ and last; } $ok or die "Incorrect entry $_"; # $1 is now the tag, $2 the rest of the line # ... }
    I changed the code a lot because I couldn't find a simple adjustment to get the OP to do this.

    -M

    Free your mind