|  line  | 
 stmt  | 
 bran  | 
 cond  | 
 sub  | 
 pod  | 
 time  | 
 code  | 
| 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 package CGI::Builder ;  | 
| 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 $VERSION = 1.36 ;  | 
| 
3
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
22603
 | 
 use strict ;           | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6
 | 
    | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
79
 | 
    | 
| 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
5
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # This file uses the "Perlish" coding style  | 
| 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 # please read http://perl.4pro.net/perlish_coding_style.html  | 
| 
7
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
8
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; use 5.006_001  | 
| 
9
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
52
 | 
 ; use Carp  | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
    | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
90
 | 
    | 
| 
10
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
16
 | 
 ; $Carp::Internal{+__PACKAGE__}++  | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
    | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
236
 | 
    | 
| 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; $Carp::Internal{__PACKAGE__.'::_'}++  | 
| 
12
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; use IO::Util  | 
| 
13
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
6989
 | 
 ; use Class::Util  | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
6678
 | 
    | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
21
 | 
    | 
| 
14
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
2048
 | 
 ; use warnings::register  | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1929
 | 
    | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
18
 | 
    | 
| 
15
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
16
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
224
 | 
 ; my @phase  | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
    | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
482
 | 
    | 
| 
17
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; BEGIN  | 
| 
18
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
9
 | 
    { @phase  = qw | CB_INIT  | 
| 
19
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     GET_PAGE  | 
| 
20
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     PRE_PROCESS  | 
| 
21
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     SWITCH_HANDLER  | 
| 
22
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     PRE_PAGE  | 
| 
23
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     PAGE_HANDLER  | 
| 
24
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     FIXUP  | 
| 
25
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     RESPONSE  | 
| 
26
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     REDIR  | 
| 
27
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                     CLEANUP  | 
| 
28
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                   |  | 
| 
29
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
176
 | 
    ; no strict 'refs'  | 
| 
30
 | 
3
 | 
 
 | 
 
 | 
  
3
  
 | 
 
 | 
17
 | 
    ; foreach my $i (0..$#phase)  | 
| 
 
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
    | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
8
 | 
    | 
| 
31
 | 
20
 | 
 
 | 
 
 | 
 
 | 
 
 | 
384
 | 
       { *{$phase[$i]} = sub(){$i}  | 
| 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
    | 
| 
32
 | 
20
 | 
 
 | 
 
 | 
 
 | 
 
 | 
108
 | 
       }  | 
| 
33
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
34
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
35
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub phase  | 
| 
36
 | 
0
 | 
 
 | 
  
  0
  
 | 
  
0
  
 | 
  
1
  
 | 
0
 | 
    { $phase[$_[1]||$_[0]->PHASE]  | 
| 
37
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
38
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
39
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub capture  | 
| 
40
 | 
11
 | 
 
 | 
 
 | 
  
11
  
 | 
  
1
  
 | 
1259
 | 
    { my ($s, $h, @args) =  @_  | 
| 
41
 | 
11
 | 
 
 | 
 
 | 
  
11
  
 | 
 
 | 
314
 | 
    ; IO::Util::capture{ $s->$h(@args) }  | 
| 
42
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
60
 | 
    }  | 
| 
43
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
44
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub import  | 
| 
45
 | 
11
 | 
 
 | 
 
 | 
  
11
  
 | 
 
 | 
20891
 | 
    { my ($cbb, $CB, @ext) = (scalar caller, @_)  | 
| 
46
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
38
 | 
    ; Class::Util::load for @ext  | 
| 
47
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
660
 | 
    ; no strict 'refs'  | 
| 
48
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
10
 | 
    ; foreach my $c (reverse @_)  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
2
 | 
    | 
| 
 
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1577
 | 
    | 
| 
49
 | 
15
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
160
 | 
       { push @{$cbb.'::ISA'}, $c unless $cbb->isa($c)  | 
| 
 
 | 
15
 | 
 
 | 
 
 | 
 
 | 
 
 | 
172
 | 
    | 
| 
50
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
51
 | 
11
 | 
  
  0
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
121
 | 
    ; $cbb->isa('Apache::CGI::Builder') && $Apache::CGI::Builder::usage  | 
| 
52
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      && carp $Apache::CGI::Builder::usage  | 
| 
53
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    ; my $sub = sub  | 
| 
54
 | 
125
 | 
 
 | 
 
 | 
 
 | 
 
 | 
160
 | 
                 { +{ map  | 
| 
55
 | 
25
 | 
 
 | 
 
 | 
  
25
  
 | 
 
 | 
1409
 | 
                       { my $h = $_  | 
| 
56
 | 
275
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1251
 | 
                       ; my @op = grep  | 
| 
57
 | 
125
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
385
 | 
                                   { defined &{$_.'::OH_'.$h}  | 
| 
 
 | 
275
 | 
 
 | 
 
 | 
 
 | 
 
 | 
268
 | 
    | 
| 
58
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                                   }  | 
| 
59
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                                   $h =~ /up$/   # ;-)  | 
| 
60
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                                   ? reverse ($CB, @ext, $cbb)  | 
| 
61
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                                   :         ($CB, @ext, $cbb)  | 
| 
62
 | 
125
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
388
 | 
                       ; @op ? ($h => \@op) : ()  | 
| 
63
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                       }  | 
| 
64
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                       qw| init pre_process pre_page fixup cleanup |  | 
| 
65
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                    }  | 
| 
66
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 }  | 
| 
67
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
62
 | 
    ; eval qq  | 
| 
68
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
13
 | 
       ! package $cbb  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
3
 | 
    | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
  
0
  
 | 
 
 | 
16
 | 
    | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
15
 | 
    | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
4
 | 
    | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
19
 | 
    | 
| 
 
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
913
 | 
    | 
| 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
    | 
| 
 
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
    | 
| 
69
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       ; use Class::groups  | 
| 
70
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
           { name    => 'overrun_handler_map'  | 
| 
71
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
           , default => \$sub  | 
| 
72
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
           }  | 
| 
73
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       ; *import = sub{} unless defined &import  | 
| 
74
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       !  | 
| 
75
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
76
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
77
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; my $exec = \&CGI::Builder::_::exec  | 
| 
78
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      | 
| 
79
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub CGI::Builder::_::exec  | 
| 
80
 | 
65
 | 
 
 | 
 
 | 
  
65
  
 | 
 
 | 
5924
 | 
    { my $s = shift  | 
| 
81
 | 
65
 | 
 
 | 
 
 | 
 
 | 
 
 | 
88
 | 
    ; my $h = shift  | 
| 
82
 | 
65
 | 
 
 | 
 
 | 
  
32
  
 | 
 
 | 
385
 | 
    ; Class::Util::gather { $s->$_(@_) } '&OH_'.$h  | 
| 
 
 | 
32
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1328
 | 
    | 
| 
83
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      , $s->overrun_handler_map($h)  | 
| 
84
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
85
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
86
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; use Class::constr  | 
| 
87
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
21
 | 
   ( { init      => \&CGI::Builder::_::init  | 
| 
88
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , no_strict => 1  | 
| 
89
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
90
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   )  | 
| 
91
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
           | 
| 
92
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
1776
 | 
 ; sub CGI::Builder::_::init  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1412
 | 
    | 
| 
93
 | 
16
 | 
 
 | 
 
 | 
  
16
  
 | 
 
 | 
11168
 | 
    { my $s = shift  | 
| 
94
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
 
 | 
0
 | 
    ; local $SIG{__DIE__} = sub{$s->die_handler(@_)}  | 
| 
95
 | 
16
 | 
 
 | 
 
 | 
 
 | 
 
 | 
110
 | 
    ; $s->$exec('init', @_)  | 
| 
 
 | 
16
 | 
 
 | 
 
 | 
 
 | 
 
 | 
49
 | 
    | 
| 
96
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
97
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      | 
| 
98
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
14
 | 
 ; use Class::groups  qw | overrun_handler_map  | 
| 
99
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                           switch_handler_map  | 
| 
100
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                           page_handler_map  | 
| 
101
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                         |  | 
| 
102
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
1976
 | 
 ; use Object::groups qw | param  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
7064
 | 
    | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
19
 | 
    | 
| 
103
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                           header  | 
| 
104
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                           page_error  | 
| 
105
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                         |  | 
| 
106
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
1977
 | 
 ; use Class::props  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
319
 | 
    | 
| 
107
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
22
 | 
   ( { name       => 'no_page_content_status'  | 
| 
108
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , default    => '204 No Content'  | 
| 
109
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
110
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   )  | 
| 
111
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     | 
| 
112
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
230
 | 
 ; use Object::props  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
3
 | 
    | 
| 
113
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   ( { name       => 'PHASE'  | 
| 
114
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , default    => CB_INIT  | 
| 
115
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , allowed    => qr/^CGI::Builder/  # only settable from CBF  | 
| 
116
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
117
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   , { name       => 'cgi_page_param'  | 
| 
118
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , default    => 'p'  | 
| 
119
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
120
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   , { name       => 'cgi'  | 
| 
121
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
238
 | 
     , default    => sub{ shift()->cgi_new }  | 
| 
122
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
123
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   , { name       => 'page_name'  | 
| 
124
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , default    => 'index'  | 
| 
125
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
126
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   , { name       => 'requested_page'  | 
| 
127
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , allowed    => qw/^CGI::Builder::process$/  | 
| 
128
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
129
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   , { name       => 'page_path'  | 
| 
130
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , default    => './tm'  | 
| 
131
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , no_strict  => 1    # doesn't croak if ./tm is not a directory  | 
| 
132
 | 
0
 | 
  
  0
  
 | 
 
 | 
 
 | 
 
 | 
0
 | 
     , validation => sub { -d or croak "'$_' is not a directory, died" }  | 
| 
133
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
134
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
50
 | 
   , { name       => [ qw| page_content page_suffix | ]  | 
| 
135
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     , default    => ''  | 
| 
136
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
     }  | 
| 
137
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   , 'dont_send_header'  | 
| 
138
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
   )  | 
| 
139
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
140
 | 
2
 | 
 
 | 
 
 | 
  
2
  
 | 
 
 | 
6254
 | 
 ; our $AUTOLOAD  | 
| 
 
 | 
2
 | 
 
 | 
 
 | 
 
 | 
 
 | 
312
 | 
    | 
| 
141
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub AUTOLOAD : lvalue              # param AUTOLOADING  | 
| 
142
 | 
8
 | 
 
 | 
 
 | 
  
8
  
 | 
 
 | 
1881
 | 
    { (my $n = $AUTOLOAD) =~ s/.*://  | 
| 
143
 | 
8
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
724
 | 
    ; carp qq(Use of unprefixed autoloaded parameter "$n". )  | 
| 
144
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
         . qq(Autoloaded parameters should start with 'my_' or '_')  | 
| 
145
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      if warnings::enabled && $n !~ /^(?:my)?_/  | 
| 
146
 | 
8
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
67
 | 
    ; @_ == 2  | 
| 
147
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      ? ( $_[0]{param}{$n} = $_[1] )  | 
| 
148
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      :   $_[0]{param}{$n}  | 
| 
149
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
150
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
151
 | 
0
 | 
 
 | 
 
 | 
  
0
  
 | 
 
 | 
0
 | 
 ; sub DESTROY {}  | 
| 
152
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
153
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub cgi_new  | 
| 
154
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    { require CGI  | 
| 
155
 | 
6
 | 
 
 | 
 
 | 
  
6
  
 | 
  
1
  
 | 
49
 | 
    ; CGI->new  | 
| 
 
 | 
6
 | 
 
 | 
 
 | 
 
 | 
 
 | 
30
 | 
    | 
| 
156
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
157
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
158
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub process  | 
| 
159
 | 
11
 | 
 
 | 
 
 | 
  
11
  
 | 
  
1
  
 | 
21
 | 
    { my ($s, $p) = @_  | 
| 
160
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
 
 | 
212
 | 
    ; local $SIG{__DIE__} = sub{$s->die_handler(@_)}  | 
| 
161
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
65
 | 
    ; $s->PHASE(GET_PAGE)  | 
| 
 
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
67
 | 
    | 
| 
162
 | 
11
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
955
 | 
    ; if ( defined $p && length $p )  | 
| 
163
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
16
 | 
       { $s->requested_page($p)  | 
| 
164
 | 
3
 | 
 
 | 
 
 | 
 
 | 
 
 | 
269
 | 
       ; $s->page_name($p)  | 
| 
165
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
166
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      else  | 
| 
167
 | 
8
 | 
 
 | 
 
 | 
 
 | 
 
 | 
55
 | 
       { $s->requested_page( $s->get_page_name() )  | 
| 
168
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
169
 | 
11
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
1077
 | 
    ; if ($s->PHASE < PRE_PROCESS)  | 
| 
170
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
295
 | 
       { $s->PHASE(PRE_PROCESS)  | 
| 
171
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
832
 | 
       ; $s->$exec('pre_process')  | 
| 
172
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
173
 | 
11
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
688
 | 
    ; if ($s->PHASE < SWITCH_HANDLER)  | 
| 
174
 | 
9
 | 
 
 | 
 
 | 
 
 | 
 
 | 
254
 | 
       { $s->switch_to( $s->page_name )  | 
| 
175
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
176
 | 
11
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
334
 | 
    ; if ($s->PHASE < FIXUP)  | 
| 
177
 | 
10
 | 
 
 | 
 
 | 
 
 | 
 
 | 
256
 | 
       { $s->PHASE(FIXUP)  | 
| 
178
 | 
10
 | 
 
 | 
 
 | 
 
 | 
 
 | 
746
 | 
       ; $s->$exec('fixup')  | 
| 
179
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
180
 | 
11
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
640
 | 
    ; if ($s->PHASE < RESPONSE)  | 
| 
181
 | 
10
 | 
 
 | 
 
 | 
 
 | 
 
 | 
259
 | 
       { $s->PHASE(RESPONSE)  | 
| 
182
 | 
10
 | 
 
 | 
 
 | 
 
 | 
 
 | 
763
 | 
       ; my $has_content = $s->page_content_check  | 
| 
183
 | 
10
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
295
 | 
       ; $s->header( -status => $s->no_page_content_status )  | 
| 
184
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
             unless $has_content || defined $s->header->{-status}  | 
| 
185
 | 
10
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
346
 | 
       ; $s->send_header() unless $s->dont_send_header  | 
| 
186
 | 
10
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
19517
 | 
       ; $s->send_content() if $has_content  | 
| 
187
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
188
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
113
 | 
    ; $s->PHASE(CLEANUP)  | 
| 
189
 | 
11
 | 
 
 | 
 
 | 
 
 | 
 
 | 
902
 | 
    ; $s->$exec('cleanup') # done however  | 
| 
190
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
191
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
192
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub switch_to  | 
| 
193
 | 
15
 | 
 
 | 
 
 | 
  
15
  
 | 
  
1
  
 | 
273
 | 
    { my ($s, $p) = splice @_, 0, 2  | 
| 
194
 | 
15
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
135
 | 
    ; $s->PHASE < PRE_PROCESS && croak 'Too early to call switch_to(), died'  | 
| 
195
 | 
15
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
398
 | 
    ; $s->PHASE > FIXUP       && croak 'Too late to call switch_to(), died'  | 
| 
196
 | 
15
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
447
 | 
    ; defined $p && length $p || croak 'No page_name name passed, died'  | 
| 
197
 | 
15
 | 
 
 | 
 
 | 
 
 | 
 
 | 
211
 | 
    ; $s->page_name($p)  | 
| 
198
 | 
15
 | 
 
 | 
 
 | 
 
 | 
 
 | 
532
 | 
    ; $s->PHASE(SWITCH_HANDLER)  | 
| 
199
 | 
15
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1182
 | 
    ; my $shm = $s->switch_handler_map  | 
| 
200
 | 
15
 | 
 
 | 
  
 66
  
 | 
 
 | 
 
 | 
365
 | 
    ; my $SH  = $$shm{$p} || $s->can("SH_$p")  | 
| 
201
 | 
15
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
52
 | 
    ; $s->$SH(@_) if $SH  | 
| 
202
 | 
15
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
1952
 | 
    ; if ($s->PHASE < PRE_PAGE)  | 
| 
203
 | 
13
 | 
 
 | 
 
 | 
 
 | 
 
 | 
340
 | 
       { $s->PHASE(PRE_PAGE)  | 
| 
204
 | 
13
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1001
 | 
       ; $s->$exec('pre_page')  | 
| 
205
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
206
 | 
15
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
791
 | 
    ; if ($s->PHASE < PAGE_HANDLER)  | 
| 
207
 | 
13
 | 
 
 | 
 
 | 
 
 | 
 
 | 
354
 | 
       { $s->PHASE(PAGE_HANDLER)  | 
| 
208
 | 
13
 | 
 
 | 
 
 | 
 
 | 
 
 | 
1039
 | 
       ; my $phm = $s->page_handler_map  | 
| 
209
 | 
13
 | 
 
 | 
  
 66
  
 | 
 
 | 
 
 | 
301
 | 
       ; my $PH  =  $$phm{$p}        || $s->can("PH_$p")  | 
| 
210
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 || ! $s->page_content_check  | 
| 
211
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                 && ($$phm{AUTOLOAD} || $s->can('PH_AUTOLOAD'))  | 
| 
212
 | 
13
 | 
  
100
  
 | 
 
 | 
 
 | 
 
 | 
176
 | 
       ; $s->$PH(@_) if $PH  | 
| 
213
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
214
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
215
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
216
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub get_page_name  | 
| 
217
 | 
8
 | 
 
 | 
 
 | 
  
8
  
 | 
  
1
  
 | 
13
 | 
    { my $s = shift  | 
| 
218
 | 
8
 | 
 
 | 
 
 | 
 
 | 
 
 | 
33
 | 
    ; my $p = $s->cgi->param($s->cgi_page_param)  | 
| 
219
 | 
8
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
2874
 | 
    ; $s->page_name($p) if defined($p) && length($p)  | 
| 
220
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
221
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
222
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub page_content_check  | 
| 
223
 | 
12
 | 
 
 | 
 
 | 
  
12
  
 | 
  
1
  
 | 
37
 | 
    { length $_[0]->page_content  | 
| 
224
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
225
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      | 
| 
226
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub send_header  | 
| 
227
 | 
10
 | 
 
 | 
 
 | 
  
10
  
 | 
  
1
  
 | 
181
 | 
    { print $_[0]->cgi->header( %{$_[0]->header} )  | 
| 
 
 | 
10
 | 
 
 | 
 
 | 
 
 | 
 
 | 
187
 | 
    | 
| 
228
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
229
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
230
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub send_content  | 
| 
231
 | 
7
 | 
 
 | 
 
 | 
  
7
  
 | 
  
1
  
 | 
27
 | 
    { my $pc = $_[0]->page_content  | 
| 
232
 | 
7
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
223
 | 
    ; if ( ref $pc eq 'CODE' )  | 
| 
 
 | 
 
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
 
 | 
 
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
233
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
       { $_[0]->$pc  | 
| 
234
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
235
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      elsif ( ref $pc eq 'SCALAR' )  | 
| 
236
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
0
 | 
       { print $$pc  | 
| 
237
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
238
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      elsif ( not ref $pc )  | 
| 
239
 | 
7
 | 
 
 | 
 
 | 
 
 | 
 
 | 
19
 | 
       { print $pc  | 
| 
240
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
241
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
242
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
243
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub redirect  | 
| 
244
 | 
1
 | 
 
 | 
 
 | 
  
1
  
 | 
  
1
  
 | 
11
 | 
    { my ($s, $url) = @_  | 
| 
245
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
15
 | 
    ; $s->PHASE < GET_PAGE        && croak 'Too early to call redirect(), died'  | 
| 
246
 | 
1
 | 
  
 50
  
 | 
 
 | 
 
 | 
 
 | 
34
 | 
    ; $s->PHASE > RESPONSE        && croak 'Too late to call redirect(), died'  | 
| 
247
 | 
1
 | 
  
 50
  
 | 
  
 33
  
 | 
 
 | 
 
 | 
37
 | 
    ; defined $url && length $url || croak 'No URL passed, died'  | 
| 
248
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
5
 | 
    ; $s->PHASE(REDIR)  | 
| 
249
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
90
 | 
    ; $s->header(-url => $url)  | 
| 
250
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
43
 | 
    ; print $s->cgi->redirect( %{$s->header} )  | 
| 
 
 | 
1
 | 
 
 | 
 
 | 
 
 | 
 
 | 
21
 | 
    | 
| 
251
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
252
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
253
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; sub die_handler  | 
| 
254
 | 
4
 | 
 
 | 
 
 | 
  
4
  
 | 
  
1
  
 | 
9
 | 
    { my ( $s, $msg ) = @_  | 
| 
255
 | 
4
 | 
 
 | 
 
 | 
 
 | 
 
 | 
32
 | 
    ; for ( my $i = 1  | 
| 
256
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
          ; my $sub = (caller($i))[3]  | 
| 
257
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
          ; $i++  | 
| 
258
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
          )  | 
| 
259
 | 
8
 | 
  
100
  
 | 
  
 66
  
 | 
 
 | 
 
 | 
96
 | 
       { die $msg if $sub eq '(eval)' && (caller($i+1))[3]  | 
| 
260
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
       }  | 
| 
261
 | 
0
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    ; die sprintf 'Fatal error in phase %s for page "%s": %s'  | 
| 
262
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                , $s->phase  | 
| 
263
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                , $s->page_name  | 
| 
264
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
                , $msg  | 
| 
265
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    }  | 
| 
266
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
      | 
| 
267
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 ; 1  | 
| 
268
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
    | 
| 
269
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 
 | 
 __END__  |