>>>>> "Marcin" == Marcin Kasperski <[EMAIL PROTECTED]> writes:
Marcin> Maybe it could be of some interest where I happened to get this Marcin> problem. I got it in my custom TransHandler implemented to reduce stat Marcin> calls and to obtain 'select from multiple directories' effect. Marcin> ... (config file) .... Marcin> our %STATIC_FILES = ( Marcin> '/img' = [ '/alternative/img', '/myapp/install/img' ], Marcin> '/css' = [ '/alternative/css', '/myapp/install/css' ], Marcin> ... Marcin> ) Marcin> ... (transhandler file, simplified of course) ... Marcin> sub handler { Marcin> my $r = shift; Marcin> my $uri = $r->uri; Marcin> ... detecting dynamic handlers ... Marcin> while( my($url, $dirs) = each %STATIC_FILES ) { Marcin> if( $uri =~ m{$url/(.*)$} ) { Marcin> foreach my $d (@$dirs) { Marcin> my $file = "$d/$1"; Marcin> if( -f $file ) { Marcin> $r->filename($file); Marcin> return OK; Marcin> } Marcin> } Marcin> } Marcin> } Marcin> } That's actually the wrong data structure then. What you want if you're only ever accessing it as a list, is a list! And, you're needlessly recompiling the regex each time. Here's a much better way to do that... our @STATIC_FILES = ( [ qr{^/img/(.*)$} => [ qw(/alternative/img /myapp/install/img) ], [ qr{^/css/(.*)$} => [ qw(/alternative/css /myapp/install/css) ], ... ); sub handler { my $r = shift; my $uri = $r->uri; for (@STATIC_FILES) { my ($pat, @dirs) = @$_; if ($uri =~ $pat) { my $tail = $1; foreach my $dir (@dirs) { my $file = "$dir/$tail"; if (-f $file) { $r->filename($file); return OK; } } } } return DECLINED; } -- Randal L. Schwartz - Stonehenge Consulting Services, Inc. - +1 503 777 0095 <[EMAIL PROTECTED]> <URL:http://www.stonehenge.com/merlyn/> Perl/Unix/security consulting, Technical writing, Comedy, etc. etc. See PerlTraining.Stonehenge.com for onsite and open-enrollment Perl training!