thanks again - GH

if I don't use a loop it seems that it only processes 1st two lines.
is there another way I can process the file without a loop?


On Mon, 18 Oct 2004 19:02:04 +0200, Gunnar Hjalmarsson
<[EMAIL PROTECTED]> wrote:
> Alden Meneses wrote:
> > here is my updated code
> > 
> > use strict;
> > use warnings;
> 
> Yeah!! :)
> 
> > while(<IBDIN>){
> >     my @array_a = split ' ', <IBDIN>;
> >     my @array_b = split ' ', <IBDIN>;
> >     compare_array();
> > }
> 
> By declaring the arrays within a while loop, they are not accessible
> outside the loop. That's why Perl complains. (Suggested reading, since
> you seem not to be used to strictures:
> http://perl.plover.com/FAQs/Namespaces.html)
> 
> This is what I first suggested:
> 
>     my @array_a = split ' ', <IBDIN>;
>     my @array_b = split ' ', <IBDIN>;
>     compare_array();
> 
> i.e. no loop at all. If you prefer a while loop, two named arrays is not
> very suitable. In that case, you may use an array of arrays instead:
> 
>     my @arrays;
>     while(<IBDIN>){
>         @{ $arrays[$.] } = split ' ';
>     }
>     compare_array();
> 
> But if you are not familiar with Perl data structures, why not stick to
> the option without a while loop.
> 
> > sub compare_array {
> >     my (%seen, @bonly);
> >     @[EMAIL PROTECTED] = (); # build lookup table
> >     foreach my $item (@array_b){
> >         push(@bonly, $item) unless exists $seen{$item};
> >     }
> >     print "@bonly \n";
> > }
> 
> Since you now are using a subroutine, I'd like to make a comment with
> respect to style. It's good programming practice to pass variables to a
> subroutine rather than having it process file scoped variables. With
> that in mind, I'd suggest the following:
> 
>     open IBDIN, "<$file" or die "cannot open $file $!";
>     my @array_a = split ' ', <IBDIN>;
>     my @array_b = split ' ', <IBDIN>;
>     close IBDIN;
> 
>     compare_array( [EMAIL PROTECTED], [EMAIL PROTECTED] );
> 
>     sub compare_array {
>         my ($ref_a, $ref_b) = @_;
>         my (%seen, @bonly);
>         @seen{ @$ref_a } = (); # build lookup table
>         foreach my $item ( @$ref_b ) {
>             push (@bonly, $item) unless exists $seen{$item};
>         }
>         print "@bonly \n";
>     }
> 
> --
> 
> 
> Gunnar Hjalmarsson
> Email: http://www.gunnar.cc/cgi-bin/contact.pl
> 
> --
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
> <http://learn.perl.org/> <http://learn.perl.org/first-response>
> 
>

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to