http://qs321.pair.com?node_id=66981


in reply to Re: Re: grepping
in thread grepping

I think you misundertand the relationship between variables and arrays. Arrays hold values; they do not hold variables.

Consider:

my $id = 47; my @data = ( $id );
@data now holds the value 47, and knows nothing whatsoever about where that value came from.

The script you've asked for (and gotten) mere tells which values appear in one array and not the other.

Replies are listed 'Best First'.
Re: Re: Re: Re: grepping
by Anonymous Monk on Mar 25, 2001 at 11:31 UTC
    At 1:30am they seem the same to me, but I do know the difference. I will be more clear in my future attempts to get help. Nice example, but it still doesn't answer my last question. And in my original post, I specifically asked which ids are in @data2 and not in @data.

    I just need a little more help in understanding how can I do lookups on any value I want instead of every value or just the first value. Please don't think I'm being scarcastic, I'm very frustrated in trying to learn about hashes and arrays. :) Smile on those who read the docs, Perl Cookbook, The Complete Reference to Perl, and even Perl DBI. Yes, I own all three and I'm trying very hard to learn this...phew. Thanks.
      Sorry. I didn't answer your last question because I thought that the first part was based on a flawed premise, and the second part made no sense. It seemed to me that the best response was to point out the misunderstanding, rather than guess at what you might have meant.

      Please restate the question.

      (This is also a good reason to sign up here rather than posting anonymously. Some of this can be hashed out in the Chatterbox.)

        Actually I've got a login, but sometimes I refrain because monks will get annoyed at how many times I post a question...lol. Anyway, please tell me where you get lost in my post so I can get better at writing these situations.

        Now, let me explain in detail what's happening.

        @data is read from a file containg many rows such as:
        1,comp1,type1
        2,comp2,type2
        3,comp3,type3

        @data2 is read from a file containing many rows such as:
        1,comp1,type1,doc1,ref1
        2,comp2,type2,doc2,ref2
        3,comp3,type3,doc3,ref3
        4,comp4,type4,doc4,ref4
        5,comp5,type5,doc5,ref5

        Using this code:
        { my %data; undef @data{@data}; foreach ( @data2 ) { print "This $_ was not found.\n" if not exists $data{$_} } }

        it matches all five values from each line in @data2 to all 3 values in @data line by line. So basically every line in @data2 gets printed when that script is run. What I want to do is match the first value from @data2 to the first value from @data and return the results based on values in @data2 that are not in @data.

        I also want to know how I can match the second value from @data2 to the first value in @data and return the results that are not in @data.

        I hope this makes better senses. I'll keep trying if it doesn't. Thanks for all your help.