We help IT Professionals succeed at work.

Using foreach and multiple arrays

jewee
jewee asked
on
Medium Priority
1,088 Views
Last Modified: 2012-05-05
I wrote a function in perl where it reads in each file in a directory and checks for a tag:

Each file should have one of the sequences of tes tags as defined in these arrays.
I am trying to do the following - if the tag sequence in the match does not follow any one of the arrays, then continue onto the next array to see if there is a match there.

I could possibly store the tag values from the file into an array then compare.  But the problem is that I only need to match the first 4 or 5  tags.  Each file consists of 10 - 15 tags.

What would be the best way to do this?

@testarray1 = qw (QW1, LS3, DE3, TER);
@testarray2 = qw (GF3, LS3, RTL, ST);
@testarray3 = qw (LS5, R3E, DE3, EEW);
@testarray4 = qw (FFL, DRE, ASD, FGE, GFH, SDF);

open(FILE, "$filename")
#read all lines
while(<FILE>)
{
  foreach $entry (@testarray1)
 {
    if (/\<tes/ && /type=\"$entry\"/)
    {
          //matches!  check the next entry
    }
    else
    {
         //stop checking this array, and check the next array
  }
    }
Comment
Watch Question

CERTIFIED EXPERT
Most Valuable Expert 2014
Top Expert 2015
Commented:
my $n=0;
for( \@testarray1, \@testarray2, \@testarray3, \@testarray4 ){
   $n++;
   push @test,{map{$_,$n}@$_}
}
{local @ARGV=grep -f,<directory/*>;
 while( <> ){
    if( /<tes/ and my($entry)=/type="([^"]+)"/ ){
       for( @test ){ if( my $n=$_->{$entry} ){ print "$ARGV matches array $n\n" }
    }
 }
}

Not the solution you were looking for? Getting a personalized solution is easy.

Ask the Experts
ozo
CERTIFIED EXPERT
Most Valuable Expert 2014
Top Expert 2015

Commented:
perl -Mdiagnostics -w -e "@testarray1 = qw (QW1, LS3, DE3, TER);"
Possible attempt to separate words with commas at -e line 1 (#1)
    (W qw) qw() lists contain items separated by whitespace; therefore
    commas aren't needed to separate the items.  (You may have used
    different delimiters than the parentheses shown here; braces are also
    frequently used.)
   
    You probably wrote something like this:
   
        qw! a, b, c !;
   
    which puts literal commas into some of the list items.  Write it without
    commas if you don't want them to appear in your data:
   
        qw! a b c !;
   
Access more of Experts Exchange with a free account
Thanks for using Experts Exchange.

Create a free account to continue.

Limited access with a free account allows you to:

  • View three pieces of content (articles, solutions, posts, and videos)
  • Ask the experts questions (counted toward content limit)
  • Customize your dashboard and profile

*This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

OR

Please enter a first name

Please enter a last name

8+ characters (letters, numbers, and a symbol)

By clicking, you agree to the Terms of Use and Privacy Policy.