Chas Owens wrote:
On 8/14/07, DJ Gruby <[EMAIL PROTECTED]> wrote:
Hello there!

Have question if that is possible to empty a few arrays with one simple command?

For the moment I clear these six tables by assigning them an empty list:

   @bitmap_addr_lo = ();
   @bitmap_addr_hi = ();
   @screen_addr_lo = ();
   @screen_addr_hi = ();
   @colors_addr_lo = ();
   @colors_addr_hi = ();

Just wondering if there is a more elegant way to achieve the same result?

Many thanks in advance for your help!

Regards,
DJ Gruby.

The desire to empty arrays is a bad sign.  It generally means you do
not have them declared with the correct scope, but, assuming you have
a good reason, there are many ways to reset a bunch of arrays.  Here
are two in addition to your straight forward way.

@bitmap_addr_lo = @bitmap_addr_hi = @screen_addr_lo = @screen_addr_hi
= @colors_addr_lo = @colors_addr_hi = ();

@$_ = () for \(@bitmap_addr_lo, @bitmap_addr_hi, @screen_addr_lo,
@screen_addr_hi, @colors_addr_lo, @colors_addr_hi);

Frankly, I think the straight forward way is more readable since I
dislike lines longer than 78 characters.  But, given the names of the
arrays and the fact that they are all being reset at the same time I
think you are using the wrong data structure.  You should be using an
HoHoA (a hash of hashes of arrays): $addr{screen}{hi} instead of
@screen_addr_hi.

Then you could clear them all by saying

for my $type (qw<screen bitmap colors>) {
    for my $loc (qw<hi low>) {
        $addr{$type}{$loc} = [];
    }
}

or (my favorite)

@{$_}{qw<hi low>} = ([], []) for @addr{qw<screen bitmap colors>};

or the more comprehensive (but dangerous if other keys are being used)

for my $type (keys %addr) {
    @$_ for keys %$type;
}


Or simply:

 %addr = ();


--
Just my 0.00000002 million dollars worth,
 Shawn

"For the things we have to learn before we can do them, we learn by doing them."
 Aristotle

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


Reply via email to