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

There is this part of my code which just prints the unique elements of 2 different arrays.it seems to work when its called the 1st time but doesn't work the 2nd time.I thought there might an reinitalizing issue but the unique array is empty the 2nd time.can anyone point out what's the issue?

my @array = (2001,2007,5012,5011,5030,5033,5030 ); my @array2 = (2001,2007,5030,5030,5011); sub Error { my(@array1) = @_; my $fail = 0; my $success = 0; my @unique = (); my %saw = (); @unique = grep(!$saw[$_]++, @array1); print "Unique result codes produced\n"; foreach $vtr(@unique) { print "$vtr : $resultcode{$vtr}"; #resultcode is a hash containi +ng elements of the arrays as keys } } &Error(@array); &Error(@array2);

Replies are listed 'Best First'.
Re: Problem with subroutine
by toolic (Bishop) on Aug 18, 2011 at 18:46 UTC
    use strict and warnings, then clean up as many error and warning messages as you can.

    With just warnings, I get:

    Name "main::saw" used only once: possible typo at Name "main::resultcode" used only once: possible typo at Unique result codes produced Use of uninitialized value in concatenation (.) or string at Use of uninitialized value in concatenation (.) or string at Use of uninitialized value in concatenation (.) or string at Use of uninitialized value in concatenation (.) or string at Use of uninitialized value in concatenation (.) or string at Use of uninitialized value in concatenation (.) or string at 2001 : 2007 : 5012 : 5011 : 5030 : 5033 : Unique result codes pr +oduced

    With just strict, I get:

    Global symbol "@saw" requires explicit package name at Global symbol "$vtr" requires explicit package name at Global symbol "$vtr" requires explicit package name at Global symbol "%resultcode" requires explicit package name at Global symbol "$vtr" requires explicit package name at Execution ... aborted due to compilation errors.
      Cleaned it up..it works! I think the critical error was that i used '[]' for the hash unknowingly..though i am still surprised the program ran for the 1st array.perl indeed is quite forgiving :)will use strict from now onwards.