SPUG: Slice of HashOfHash

Jacinta Richardson jarich at perltraining.com.au
Fri Nov 17 16:49:42 PST 2006

Ivan Heffner wrote:

> This is all fine in a simple case, but know that a hash look-up, while
> relatively cheap, is not free.  Further, taking this example and
> abstracting it into an object-based interface, it become relatively
> expensive and incurs useless overhead.


> This now does a method call to get the family, then another to get the
> husband to check if it is "true" then does it all again to check
> equality.  In a big app, these calls get expensive.  But there's a
> short-cut method to do this.  Use Perl's short-circuiting logical '||'
> to make a single method call (or set of method calls):
>   foreach my $family ( $cartoon->families() ) {
>       if ( ( $cartoon->$family->husband() || '' ) eq 'fred') {
>            print "yes\n";
>       }
>   }

Or alternately (because there's more than one way to do it:

	foreach my $family ($cartoon->families()) {
		if($family->is_husband('fred')) {
			print "yes\n";

Depending on how the classes are encoded, and whether checking the husband's 
name is going to be a regular enough thing to make it work wrapping into a sub.

I do agree that using || helps, though.  Excellent point!


More information about the spug-list mailing list