> Calling keys() (or values()) in void context is quite efficient.
Nice to now. So it seems the correct idiom for using each is:
keys %hash;
while( my($k,$v) = each %hash ) {
...
}
> p.s. I've shown an example, so we can have this issue documented
> together with other mod_perl gotchas. It's interesting that I don't
> remember this issue being reported earlier.
Maybe it could be of some interest where I happened to get this
problem. I got it in my custom TransHandler implemented to reduce stat
calls and to obtain 'select from multiple directories' effect.
... (config file) ....
our %STATIC_FILES = (
'/img' = [ '/alternative/img', '/myapp/install/img' ],
'/css' = [ '/alternative/css', '/myapp/install/css' ],
...
)
... (transhandler file, simplified of course) ...
sub handler {
my $r = shift;
my $uri = $r->uri;
... detecting dynamic handlers ...
while( my($url, $dirs) = each %STATIC_FILES ) {
if( $uri =~ m{$url/(.*)$} ) {
foreach my $d (@$dirs) {
my $file = "$d/$1";
if( -f $file ) {
$r->filename($file);
return OK;
}
}
}
}
}