Visit Our UNIX and Linux User Community


PERL: simple comparing arrays question


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting PERL: simple comparing arrays question
# 1  
Old 09-06-2009
PERL: simple comparing arrays question

Hi there, i have been trying different methods and i wonder if somebody could explain to me how i would perform a comparison on two arrays for example


Code:
my @array1 = ("gary" ,"peter", "paul");
my @array2 = ("gary" ,"peter", "joe");


I have two arrays above, and i want to something like this
Code:
for my $name ( sort (@array1)) {
	if (! exists $array2[$_]) {
            print "$name does not exist in array2";
        } else { 
            print "woo hoo $name exists in both arrays";
        }
}

the code above does not work, but hopefully, you'll get from it the general idea of what im trying to do.. the line that is bugging me is the one directly under the "for" statement ....i know that line is screwed but i cant seem to work out how to test the existence of the $name variable in the other array

its probably a really simple fix to my above code but any help on this would be greatly appreciated

Last edited by hcclnoodles; 09-06-2009 at 04:28 PM..
# 2  
Old 09-06-2009
In your "if", what is the value of "$_"? Did you take a hash example and try to convert it to work on lists?

What you want to do in the if is iterate over the second list. One solution:

Code:
for my $name ( sort (@array1)) {
  my $found = 0;
  foreach (@array2) {
    if ( $name eq $_ ) { $found++; }
  }
  if ( $found ) {
    print "woo hoo $name exists in both arrays\n";
  } else {
    print "$name does not exist in array2\n";
  }
}

perl has a grep function which is supposed to iterate over the list for you so you might also look at that.
# 3  
Old 09-06-2009
Something like this:

Code:
perl -le'
	@a1 = qw(gary peter paul);
	@a2 = qw(gary peter joe);

	@seen{@a2} = (1) x @a2;

	print $_, $seen{$_}
	  ? " exists "
	  : " does not exist ", "in \@a2"
	  for @a1;
  '

Code:
% perl -le'
@a1 = qw(gary peter paul);
@a2 = qw(gary peter joe);

@seen{@a2} = (1) x @a2;

print $_, $seen{$_}
  ? " exists "
  : " does not exist ", "in \@a2"
  for @a1;
  '
gary exists in @a2
peter exists in @a2
paul does not exist in @a2

# 4  
Old 09-07-2009
search List::Compare in CPAN
# 5  
Old 09-07-2009
With Perl 5.10 and the smart match operator:


Code:
% perl -E'
@a1 = qw(gary peter paul);
@a2 = qw(gary peter joe);
say $_, $_ ~~ @a2
  ? " exists "
  : " does not exist ",  "in \@a2"
  for @a1;
  '
gary exists in @a2
peter exists in @a2
paul does not exist in @a2

# 6  
Old 09-07-2009
MySQL

thanks guys, that has been incredibly useful and informative

Previous Thread | Next Thread
Test Your Knowledge in Computers #66
Difficulty: Medium
IT and cybersecurity risk management is based on the intersection of these three areas, criticality, vulnerability, and threat.
True or False?

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Simple Perl question

Hello, I'm completely new to Perl and I'm just looking for a quick answer to some code I'm trying to come up with. I'm trying to access a website, part of the URL I want the user to be able to define via standard input. As you can see below I'm still trying to get the syntax. ... (2 Replies)
Discussion started by: wxornot
2 Replies

2. Shell Programming and Scripting

Comparing 2 arrays but ignoring certain patterns

I'm trying to compare 2 array and print the difference at a 3rd file. However how am i going to compare this 2 arrays by ignoring certain patterns: For example: 1st array contains: ctahci cptcsa0 ctsata:25:seed cptcsa1:50:seed ctsata_1:25:seed 2nd array contains: cptcsa0 ctsata... (0 Replies)
Discussion started by: hongping
0 Replies

3. Shell Programming and Scripting

Simple Question about Reading file by Perl

Hi , I just write a simple function to read the file line by line. But when I run it it says out of memory. I am not sure about the root cause, Can someone help me out of this? :D #! /usr/bin/perl use strict; sub checkAPs{ my $NDPDir = "/home/eweiqqu/NCB/NDP_files/"; ... (1 Reply)
Discussion started by: Damon_Qu
1 Replies

4. UNIX for Dummies Questions & Answers

Comparing lists.. Arrays maybe?

Problem Part 1. Gather data from linux server and output to a file named data_DDMMYY Output file must contain the file name and size Part 2. Compare todays data_DDMMYY to yesterdays data_DDMMYY and output results to a file named difference_DDMMYY Output file must show the difference in... (3 Replies)
Discussion started by: Aussiemick
3 Replies

5. Programming

question about int arrays and file pointer arrays

if i declare both but don't input any variables what values will the int array and file pointer array have on default, and if i want to reset any of the elements of both arrays to default, should i just set it to 0 or NULL or what? (1 Reply)
Discussion started by: omega666
1 Replies

6. Shell Programming and Scripting

Simple perl question

I am totally new to perl. I am modifying someone else's script. I have the following output: # ./some-perlscript A B C D E B - E, is generated through the print command that I put in the script. I want to remove A, it seems it is generated automatically by a custom OS it is querying when... (3 Replies)
Discussion started by: streetfighter2
3 Replies

7. Shell Programming and Scripting

Comparing arrays in perl

Hi all, I am trying to compare two arrays in perl using the following code. foreach $item (@arrayA){ push(@arrayC, $item) unless grep(/$item/, @arrayB); ... (1 Reply)
Discussion started by: chriss_58
1 Replies

8. Shell Programming and Scripting

comparing two arrays or strings in bash

Hi there, im having issue with comparing two variables, in a bash script. im trying to do the following: - get a word from user 1 - split the word into array - get a character from user2 trying to compare the character entered by user 2 with every single character in the array... (2 Replies)
Discussion started by: new2Linux
2 Replies

9. Shell Programming and Scripting

perl: simple question on string append

I want to append a decimal number to a string. But I want to restrict the number to only 2 decimal points for e.g: my $output = "\n The number is = "; my $number = 2.3333333; $output = $output . $number; But I want the $output as: "The number is = 2.33"; and not 2.3333333 (I do not... (1 Reply)
Discussion started by: the_learner
1 Replies

10. Shell Programming and Scripting

Comparing Arrays?

Is there anyway that I can compare two Arrays to see if any new strings have been added in them? eg: Array 1: Joe Bob Jane Array 2: Joe Bob Jane Greg It would then output a new array with the changes: Array 3: Greg I'm not very good at shell scripting, and my google and forum searches... (4 Replies)
Discussion started by: blckleprd
4 Replies

Featured Tech Videos