in reply to Re: Whither the truth of a tied hash?
in thread Whither the truth of a tied hash?

Your results are the scalar context of keys(). I'm talking about something like the following statement:
   if (%h) {
      ...do something with a non-empty hash
   }

As far as I can tell, there is no method in the tied hash class that is invoked for this. Try the following module to test:

package TieTest;

use strict;
use Carp;

use vars qw(@ISA);

use Tie::Hash;
@ISA = qw( Tie::StdHash );

sub STORE    { notify('STORE');    shift->SUPER::STORE(@_);    }
sub FETCH    { notify('FETCH');    shift->SUPER::FETCH(@_);    }
sub FIRSTKEY { notify('FIRSTKEY'); shift->SUPER::FIRSTKEY(@_); }
sub NEXTKEY  { notify('NEXTKEY');  shift->SUPER::NEXTKEY(@_);  }
sub EXISTS   { notify('EXISTS');   shift->SUPER::EXISTS(@_);   }
sub DELETE   { notify('DELETE');   shift->SUPER::DELETE(@_);   }
sub CLEAR    { notify('CLEAR');    shift->SUPER::CLEAR(@_);    }

sub notify { print shift, " here.\n"; }

1;
You can use it with something like this:
   #!/usr/bin/perl
   use TieTest;
   tie %h, 'TieTest';
   grep($h{$_} = $_, 0 .. 9);
   print "Scalar test:\n";
   $c = %h;
   print "count is $c\n";
Any ideas?
  • Comment on RE: Re: Whither the truth of a tied hash?

Replies are listed 'Best First'.
RE: RE: Re: Whither the truth of a tied hash?
by chromatic (Archbishop) on Apr 29, 2000 at 00:28 UTC
    The only thing I found that helped at all was copying the hash with a simple:
    my %i = %h; my $c = %i; print "count is $c\n";
    I even made an AUTOLOAD subroutine, to see if I could trap any other method calls. No luck.
      Ah, well. I figured as much. I guess I'll mine the net to see if it's a known problem with perl; if it has not been discussed yet I'll toss it at the porters.