You are viewing a plain text version of this content. The canonical link for it is here.
Posted to modperl-cvs@perl.apache.org by st...@apache.org on 2001/12/05 06:31:09 UTC

cvs commit: modperl-2.0/t/response/TestApache compat.pm

stas        01/12/04 21:31:09

  Modified:    lib/Apache compat.pm
               t/apache compat.t
               t/response/TestApache compat.pm
  Log:
  - the implementation of compatibility layer for Apache::File from 1.x
  - tests
  
  Revision  Changes    Path
  1.25      +63 -0     modperl-2.0/lib/Apache/compat.pm
  
  Index: compat.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/lib/Apache/compat.pm,v
  retrieving revision 1.24
  retrieving revision 1.25
  diff -u -r1.24 -r1.25
  --- compat.pm	2001/11/19 23:33:21	1.24
  +++ compat.pm	2001/12/05 05:31:09	1.25
  @@ -263,5 +263,68 @@
       $r->send_fd_length($fh, -1);
   }
   
  +package Apache::File;
  +
  +use Fcntl ();
  +use Symbol ();
  +
  +sub new {
  +    my($class) = shift;
  +    my $fh = Symbol::gensym;
  +    my $self = bless $fh, ref($class)||$class;
  +    if (@_) {
  +        return $self->open(@_) ? $self : undef;
  +    }
  +    else {
  +        return $self;
  +    }
  +}
  +
  +sub open {
  +    my($self) = shift;
  +    open $self, shift, @_; # because of open's prototype
  +}
  +
  +sub close {
  +    my($self) = shift;
  +    close $self;
  +}
  +
  +
  +my $TMPNAM = 'aaaaaa';
  +my $TMPDIR = $ENV{'TMPDIR'} || $ENV{'TEMP'} || '/tmp';
  +($TMPDIR) = $TMPDIR =~ /^([^<>|;*]+)$/; #untaint
  +my $Mode = Fcntl::O_RDWR()|Fcntl::O_EXCL()|Fcntl::O_CREAT();
  +my $Perms = 0600;
  +
  +sub tmpfile {
  +    my $class = shift;
  +    my $limit = 100;
  +    my $r = Apache->request;
  +    while ($limit--) {
  +        my $tmpfile = "$TMPDIR/${$}" . $TMPNAM++;
  +        my $fh = $class->new;
  +        sysopen($fh, $tmpfile, $Mode, $Perms);
  +        $r->register_cleanup(sub { unlink $tmpfile }) if $r;
  +        if ($fh) {
  +	    return wantarray ? ($tmpfile, $fh) : $fh;
  +	}
  +    }
  +}
  +
  +# the following functions now live in Apache::Response
  +use Apache::Response;
  +# * discard_request_body
  +# * meets_conditions
  +# * set_content_length
  +# * set_etag
  +# * set_last_modified
  +# * update_mtime
  +
  +# the following functions now live in Apache::RequestRec
  +use Apache::RequestRec;
  +# * mtime
  +
  +
   1;
   __END__
  
  
  
  1.4       +23 -1     modperl-2.0/t/apache/compat.t
  
  Index: compat.t
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/apache/compat.t,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- compat.t	2001/10/01 09:04:11	1.3
  +++ compat.t	2001/12/05 05:31:09	1.4
  @@ -6,7 +6,7 @@
   use Apache::TestUtil;
   use Apache::TestRequest;
   
  -plan tests => 11, \&have_lwp;
  +plan tests => 20, \&have_lwp;
   
   my $location = "/TestApache::compat";
   
  @@ -52,6 +52,12 @@
   t_header('out','set',       q{$r->header_out($key => $val)});
   t_header('out','unset',     q{$r->header_out($key => undef)});
   
  +# Apache::File
  +{
  +    my @data = (test => 'file');
  +    my $data = GET_BODY query(@data) || '';
  +    ok_nok($data);
  +}
   
   
   ### helper subs ###
  @@ -67,5 +73,21 @@
           GET_BODY(query(test => 'header', way => $way, what => $what)),
           $comment
           );
  +}
  +
   
  +# accepts multiline var where, the lines matching:
  +# ^ok\n$  results in ok(1)
  +# ^nok\n$ results in ok(0)
  +# the rest is printed as is
  +sub ok_nok {
  +    for (split /\n/, shift) {
  +        if (/^ok\n?$/) {
  +            ok 1;
  +        } elsif (/^nok\n?$/) {
  +            ok 0;
  +        } else {
  +            print "$_\n";
  +        }
  +    }
   }
  
  
  
  1.3       +61 -2     modperl-2.0/t/response/TestApache/compat.pm
  
  Index: compat.pm
  ===================================================================
  RCS file: /home/cvs/modperl-2.0/t/response/TestApache/compat.pm,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- compat.pm	2001/09/29 19:33:39	1.2
  +++ compat.pm	2001/12/05 05:31:09	1.3
  @@ -3,16 +3,23 @@
   use strict;
   use warnings FATAL => 'all';
   
  -use Apache::compat ();
  -
   use Apache::TestUtil;
  +use Apache::Test ();
  +
  +use Apache::compat ();
   use Apache::Constants qw(OK M_POST DECLINED);
   
  +use subs qw(ok debug);
  +my $gr;
  +
   sub handler {
       my $r = shift;
   
       $r->send_http_header('text/plain');
   
  +    my $cfg = Apache::Test::config();
  +    my $vars = $cfg->{vars};
  +
       my %data;
       if ($r->method_number == M_POST) {
           %data = $r->content;
  @@ -70,8 +77,60 @@
               $r->print(t_is_equal($exp, $got) ? 'ok' : 'nok');
           }
       }
  +    elsif ($data{test} eq 'file') {
  +        $gr = $r;
  +        my $file = $vars->{t_conf_file};
  +
  +        debug "new Apache::File file object";
  +        ok my $fh = Apache::File->new;
  +
  +        debug "open itself";
  +        if ($fh->open($file)) {
  +            ok 1;
  +            debug "read from file";
  +            my $read = <$fh>;
  +            ok $read;
  +            debug "close file";
  +            ok $fh->close;
  +        }
  +        else {
  +            ok 0;
  +            debug "ok: cannot read from the closed fh";
  +            ok 1;
  +            debug "ok: close file should fail, wasn't opened";
  +            ok !$fh->close;
  +        }
  +
  +        debug "open non-exists";
  +        ok !$fh->open("$file.nochance");
   
  +        debug "new+open";
  +        if (my $fh = Apache::File->new($file)) {
  +            ok 1;
  +            $fh->close;
  +        }
  +        else {
  +            ok 0;
  +        }
  +
  +        debug "new+open non-exists";
  +        ok !Apache::File->new("$file.yeahright");
  +
  +        debug "open tmpfile";
  +        ok my ($tmpfile, $tmpfh) = Apache::File->tmpfile;
  +
  +        debug "write/read from tmpfile";
  +        my $write = "test $$";
  +        print $tmpfh $write;
  +        seek $tmpfh, 0, 0;
  +        my $read = <$tmpfh>;
  +        ok $read eq $write;
  +    }
  +
       OK;
   }
  +
  +sub ok    { $gr->print($_[0] ? "ok\n" : "nok\n"); }
  +sub debug { $gr->print("# $_\n") for @_; }
   
   1;
  
  
  

more random failures

Posted by Stas Bekman <st...@stason.org>.
Doug MacEachern wrote:

> On Thu, 6 Dec 2001, Stas Bekman wrote:
>  
> 
>>modperl/getc.............FAILED tests 1-2 
>>
> 
> ouch, another one that left STDIN tied to a stale request.  try now.

that works, I didn't see the commit emails though.

More failures:

----
t/TEST -v -order=89573612 -times=10

apache/cgihandler........1..2
not ok 1
# Failed test 1 in apache/cgihandler.t at line 16
ok 2
FAILED test 1
         Failed 1/2 tests, 50.00% okay

----
t/TEST -v -order=544889117 -times=10

apache/scanhdrs..........1..4
ok 1
not ok 2
# Failed test 2 in apache/scanhdrs.t at line 16
dubious
         Test returned status 255 (wstat 65280, 0xff00)
DIED. FAILED tests 2-4
         Failed 3/4 tests, 25.00% okay

fails on undef header
ok $res->header('X-Perl-Module') eq $module;

but shouldn't it be cleaner to write with warnings FATAL=>'all'?:

ok $res->header('X-Perl-Module')||'' eq $module;

------------
t/TEST -v -order=489400084 -times=10

apache/scanhdrs..........1..4
not ok 1
# Failed test 1 in apache/scanhdrs.t at line 14
dubious
         Test returned status 255 (wstat 65280, 0xff00)
DIED. FAILED tests 1-4
         Failed 4/4 tests, 0.00% okay

------------
t/TEST -v -order=536158339 -times=10

modules/cgi..............1..5
# testing : GET /TestModules::cgi?PARAM=2
# expected: 'ok 2'
# received: ''
not ok 1


_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:stas@stason.org  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: cvs commit: modperl-2.0/t/response/TestApache compat.pm

Posted by Doug MacEachern <do...@covalent.net>.
On Thu, 6 Dec 2001, Stas Bekman wrote:
 
> modperl/getc.............FAILED tests 1-2 

ouch, another one that left STDIN tied to a stale request.  try now.



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: cvs commit: modperl-2.0/t/response/TestApache compat.pm

Posted by Stas Bekman <st...@stason.org>.
Doug MacEachern wrote:

> On Thu, 6 Dec 2001, Stas Bekman wrote:
>  
> 
>>But it's still not good for the compat layer. If a user doesn't have 
>>this setting it still core dumps with:
>>
>>t/TEST modules/cgi filter/input_msg apache/compat
>>
> 
> fixed with the "various bug fixes in the tls code" commit.


Great! But now I see a new problem with the same seed:

t/TEST -order=89573612 -times=6

modperl/getc.............FAILED tests 1-2 

	Failed 2/2 tests, 0.00% okay

I've narrowed it down to:

t/TEST -v modperl/readline filter/input_msg modperl/getc

filter/input_msg....# connecting to localhost.localdomain:8534
1..1
ok 1
ok
modperl/getc........1..2
not ok 1
# Failed test 1 in modperl/getc.t at line 16
# testing : getc
# expected: 'abcdefghijklmnopqrstuvwxyz'
# received: ''
not ok 2
# Failed test 2 in modperl/getc.t at line 18


_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:stas@stason.org  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: cvs commit: modperl-2.0/t/response/TestApache compat.pm

Posted by Doug MacEachern <do...@covalent.net>.
On Thu, 6 Dec 2001, Stas Bekman wrote:
 
> But it's still not good for the compat layer. If a user doesn't have 
> this setting it still core dumps with:
> 
> t/TEST modules/cgi filter/input_msg apache/compat

fixed with the "various bug fixes in the tls code" commit.




---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: cvs commit: modperl-2.0/t/response/TestApache compat.pm

Posted by Stas Bekman <st...@stason.org>.
Stas Bekman wrote:

> stas@apache.org wrote:
> 
>> stas        01/12/04 21:31:09
>>
>>   Modified:    lib/Apache compat.pm
>>                t/apache compat.t
>>                t/response/TestApache compat.pm
>>   Log:
>>   - the implementation of compatibility layer for Apache::File from 1.x
>>   - tests
> 
> 
> 
> Any ideas why tmpfile that I've committed recently (copied from 1.x as 
> it) dumps core with this sequence of tests? (or -order=89573612 -times=3)
> 
>   t/TEST modules/cgi filter/input_msg apache/compat

I've solved the core dump, must have used:

PerlOptions +GlobalRequest

for Apache->request to work (see the commit)

But it's still not good for the compat layer. If a user doesn't have 
this setting it still core dumps with:

t/TEST modules/cgi filter/input_msg apache/compat

_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:stas@stason.org  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: cvs commit: modperl-2.0/t/response/TestApache compat.pm

Posted by Stas Bekman <st...@stason.org>.
stas@apache.org wrote:

> stas        01/12/04 21:31:09
> 
>   Modified:    lib/Apache compat.pm
>                t/apache compat.t
>                t/response/TestApache compat.pm
>   Log:
>   - the implementation of compatibility layer for Apache::File from 1.x
>   - tests


Any ideas why tmpfile that I've committed recently (copied from 1.x as 
it) dumps core with this sequence of tests? (or -order=89573612 -times=3)

   t/TEST modules/cgi filter/input_msg apache/compat


#0  apr_palloc (a=0x8bf60c4, reqsize=16) at apr_pools.c:1214
1214 
     first_avail = blok->h.first_avail;
(gdb)
(gdb) where
#0  apr_palloc (a=0x8bf60c4, reqsize=16) at apr_pools.c:1214
#1  0x4003e7a2 in apr_pool_cleanup_register (p=0x8bf60c4, data=0x8bf60c4,
     plain_cleanup=0x405724d0 <mpxs_cleanup_run>,
     child_cleanup=0x8065c58 <apr_pool_cleanup_null>) at apr_pools.c:774
#2  0x405729fb in mpxs_apr_pool_cleanup_register (my_perl=0x8581e78,
     p=0x8bf60c4, cv=0x8d16544, arg=0x0)
     at /home/stas/apache.org/mp-file/xs/APR/Pool/APR__Pool.h:71
#3  0x40572ce2 in XS_APR__Pool_cleanup_register (my_perl=0x8581e78,
     cv=0x87e38f8) at Pool.xs:43
#4  0x403f8ad0 in Perl_pp_entersub (my_perl=0x8581e78) at pp_hot.c:2727
#5  0x403d75b9 in Perl_runops_debug (my_perl=0x8581e78) at dump.c:1388
#6  0x4037cf20 in S_call_body (my_perl=0x8581e78, myop=0xbfffd270, 
is_eval=0)
     at perl.c:1948
#7  0x4037caa2 in Perl_call_sv (my_perl=0x8581e78, sv=0x87de61c, flags=4)
     at perl.c:1866
#8  0x40345938 in modperl_callback (my_perl=0x8581e78, handler=0x8173f5c,
     p=0x8ce261c, r=0x8ce264c, s=0x810442c, args=0x8cedd0c)
     at modperl_callback.c:52
#9  0x40346073 in modperl_callback_run_handlers (idx=6, type=3, 
r=0x8ce264c,
     c=0x0, s=0x810442c, pconf=0x0, plog=0x0, ptemp=0x0)
     at modperl_callback.c:179
#10 0x4034614e in modperl_callback_per_dir (idx=6, r=0x8ce264c)
     at modperl_callback.c:203
#11 0x40340ebe in modperl_response_handler_run (r=0x8ce264c, finish=1)
     at mod_perl.c:515
#12 0x40340f5d in modperl_response_handler (r=0x8ce264c) at mod_perl.c:534
#13 0x080b4fa7 in ap_run_handler (r=0x8ce264c) at config.c:185
#14 0x080b5453 in ap_invoke_handler (r=0x8ce264c) at config.c:350
#15 0x0808ffe5 in ap_process_request (r=0x8ce264c) at http_request.c:292
#16 0x0808c847 in ap_process_http_connection (c=0x87a609c) at 
http_core.c:283
#17 0x080bd527 in ap_run_process_connection (c=0x87a609c) at connection.c:84
#18 0x080b3ddf in child_main (child_num_arg=0) at prefork.c:684
#19 0x080b3f23 in make_child (s=0x810442c, slot=0) at prefork.c:771
#20 0x080b3f84 in startup_children (number_to_start=1) at prefork.c:794
#21 0x080b4269 in ap_mpm_run (_pconf=0x80ffd4c, plog=0x8145f7c, s=0x810442c)
     at prefork.c:989
#22 0x080b8d62 in main (argc=7, argv=0xbffff674) at main.c:445
#23 0x402136a0 in __libc_start_main () from /lib/libc.so.6


-- 


_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:stas@stason.org  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: more Apache::File compat issues

Posted by Doug MacEachern <do...@covalent.net>.
On Thu, 6 Dec 2001, Stas Bekman wrote:
 
> in fact this one is the opposite, the syntax in 2.0 is only
> $r->set_last_modified, with no args.

same with the 1.x ap_set_last_modified() function.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: more Apache::File compat issues

Posted by Stas Bekman <st...@stason.org>.
Stas Bekman wrote:

 > There are a few nits to solve with Apache::File compat:
 >
 > the same here:


in fact this one is the opposite, the syntax in 2.0 is only
$r->set_last_modified, with no args.


 > =item $r->set_last_modified()
 >
 > This method is used to set the outgoing Last-Modified header from the
 > value returned by $r->mtime. The method checks that the specified time
 > is not in the future. In addition, using set_last_modified() is faster
 > and more concise than setting Last-Modified in the headers_out table
 > yourself.
 >
 > You may provide an optional time argument, in which case the method
 > will first call the update_mtime() to set the file's last modification
 > date. It will then set the outgoing Last-Modified header as before.
 >
 >    $r->update_mtime((stat $r->finfo)[9]);
 >    $r->set_last_modified;
 >    $r->set_last_modified((stat $r->finfo)[9]); #same as the two lines 
above



_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:stas@stason.org  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/



---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: more Apache::File compat issues

Posted by Doug MacEachern <do...@covalent.net>.
On Fri, 7 Dec 2001, Stas Bekman wrote:
 
> I know, my question was whether we keep the interface exactly as 1.x was 
>   or we change it and let the compat layer to do the work. If we do make 
> it fully compatible, should these adjustments live in File__Apache.h or 
> elsewhere?

yeah, we should support the same interface for these functions.  the only
one that needs a wrapper it set_content_length, which should live in the
wrapper for the module it belongs to, Apache__Response.h

should be able to use the apache_functions.map for the others that just
have default arguments.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: more Apache::File compat issues

Posted by Stas Bekman <st...@stason.org>.
Doug MacEachern wrote:

> On Thu, 6 Dec 2001, Stas Bekman wrote:
> 
> 
>>There are a few nits to solve with Apache::File compat:
>>
>>- $r->set_content_length doesn't support the call without args in 2.0
>>
> ... 
> 
>>The same problem here, in 2.0 you must pass the time argument
>>
>>=item $r->update_mtime()
>>
> ... 
> 
>>=item $r->set_last_modified()
>>
> 
> right, look at the 1.x File.xs, modperl handles this stuff.  so for 2.0
> these function need wrappers in xs/ to handle this.

I know, my question was whether we keep the interface exactly as 1.x was 
  or we change it and let the compat layer to do the work. If we do make 
it fully compatible, should these adjustments live in File__Apache.h or 
elsewhere?


_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:stas@stason.org  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


Re: more Apache::File compat issues

Posted by Doug MacEachern <do...@covalent.net>.
On Thu, 6 Dec 2001, Stas Bekman wrote:

> There are a few nits to solve with Apache::File compat:
> 
> - $r->set_content_length doesn't support the call without args in 2.0
... 
> The same problem here, in 2.0 you must pass the time argument
> 
> =item $r->update_mtime()
... 
> =item $r->set_last_modified()

right, look at the 1.x File.xs, modperl handles this stuff.  so for 2.0
these function need wrappers in xs/ to handle this.


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org


more Apache::File compat issues

Posted by Stas Bekman <st...@stason.org>.
There are a few nits to solve with Apache::File compat:

- $r->set_content_length doesn't support the call without args in 2.0

   From File/File.pm:

=item $r->set_content_length()

This method sets the outgoing Content-length header based on its
argument, which should be expressed in byte units. If no argument is
specified, the method will use the size returned by $r->filename. This
method is a bit faster and more concise than setting Content-length in
the headers_out table yourself.

    $r->set_content_length;
    $r->set_content_length(-s $r->finfo); #same as above
    $r->set_content_length(-s $filename);

-------------------

The same problem here, in 2.0 you must pass the time argument

=item $r->update_mtime()

Rather than setting the request record mtime field directly, you can
use the update_mtime() method to change the value of this field. It
will only be updated if the new time is more recent than the current
mtime. If no time argument is present, the default is the last
modified time of $r->filename.

    $r->update_mtime;
    $r->update_mtime((stat $r->finfo)[9]); #same as above
    $r->update_mtime(time);


-------------------------
the same here:

=item $r->set_last_modified()

This method is used to set the outgoing Last-Modified header from the
value returned by $r->mtime. The method checks that the specified time
is not in the future. In addition, using set_last_modified() is faster
and more concise than setting Last-Modified in the headers_out table
yourself.

You may provide an optional time argument, in which case the method
will first call the update_mtime() to set the file's last modification
date. It will then set the outgoing Last-Modified header as before.

    $r->update_mtime((stat $r->finfo)[9]);
    $r->set_last_modified;
    $r->set_last_modified((stat $r->finfo)[9]); #same as the two lines above


_____________________________________________________________________
Stas Bekman             JAm_pH      --   Just Another mod_perl Hacker
http://stason.org/      mod_perl Guide   http://perl.apache.org/guide
mailto:stas@stason.org  http://ticketmaster.com http://apacheweek.com
http://singlesheaven.com http://perl.apache.org http://perlmonth.com/


---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@perl.apache.org
For additional commands, e-mail: dev-help@perl.apache.org