The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<!DOCTYPE html
     PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
This file was generated by Devel::Cover Version 0.66
Devel::Cover is copyright 2001-2010, Paul Johnson (pjcj@cpan.org)
Devel::Cover is free. It is licensed under the same terms as Perl itself.
The latest version of Devel::Cover should be available from my homepage:
http://www.pjcj.net
-->
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"></meta>
    <meta http-equiv="Content-Language" content="en-us"></meta>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <link rel="stylesheet" type="text/css" href="cover.css"></link>
    <title>File Coverage: lib/Catalyst/Controller/Combine.pm</title>
</head>
<body>
<h1>File Coverage</h1>
<table>
<tr><td class="h" align="right">File:</td><td align="left">lib/Catalyst/Controller/Combine.pm</td></tr>
<tr><td class="h" align="right">Coverage:</td><td align="left" class="c0">72.4%</td></tr>
</table>
<div><br/></div>
<table>
<tr><th>line</th><th>stmt</th><th>bran</th><th>cond</th><th>sub</th><th>pod</th><th>time</th><th>code</th></tr>
<tr><td class="h">1</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">package Catalyst::Controller::Combine;</td></tr>
<tr><td class="h">2</td><td colspan="7"></td></tr><tr><td class="h">3</td><td><div class="c3">7</div><div class="c3">7</div><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L3">7</a></div></td><td></td><td><div>1513</div><div>11</div><div>58</div></td><td class="s">use Moose;</td></tr>
<tr><td class="h">4</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># w/o BEGIN, :attrs will not work</td></tr>
<tr><td class="h">5</td><td><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L5">7</a></div></td><td></td><td><div>23679</div></td><td class="s">BEGIN { extends &#39;Catalyst::Controller&#39; }</td></tr>
<tr><td class="h">6</td><td colspan="7"></td></tr><tr><td class="h">7</td><td><div class="c3">7</div><div class="c3">7</div><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L7">7</a></div></td><td></td><td><div>21654</div><div>8</div><div>96</div></td><td class="s">use Path::Class ();</td></tr>
<tr><td class="h">8</td><td><div class="c3">7</div><div class="c3">7</div><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L8">7</a></div></td><td></td><td><div>22</div><div>10</div><div>76</div></td><td class="s">use File::stat;</td></tr>
<tr><td class="h">9</td><td><div class="c3">7</div><div class="c3">7</div><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L9">7</a></div></td><td></td><td><div>395</div><div>6</div><div>291</div></td><td class="s">use List::Util qw(max);</td></tr>
<tr><td class="h">10</td><td><div class="c3">7</div><div class="c3">7</div><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L10">7</a></div></td><td></td><td><div>1362</div><div>4524</div><div>3840</div></td><td class="s">use Text::Glob qw(match_glob);</td></tr>
<tr><td class="h">11</td><td colspan="7"></td></tr><tr><td class="h">12</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has dir       =&gt; (is =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">13</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; sub { &#39;static/&#39; . shift-&gt;action_namespace },</td></tr>
<tr><td class="h">14</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lazy =&gt; 1);</td></tr>
<tr><td class="h">15</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has extension =&gt; (is =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">16</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; sub { shift-&gt;action_namespace },</td></tr>
<tr><td class="h">17</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lazy =&gt; 1);</td></tr>
<tr><td class="h">18</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has depend    =&gt; (is =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">19</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; sub { return {} });</td></tr>
<tr><td class="h">20</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has mimetype  =&gt; (is =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">21</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; sub {</td></tr>
<tr><td class="h">22</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $ext = shift-&gt;extension;</td></tr>
<tr><td class="h">23</td><td colspan="7"></td></tr><tr><td class="h">24</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return $ext eq &#39;js&#39;  ? &#39;application/javascript&#39;</td></tr>
<tr><td class="h">25</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: $ext eq &#39;css&#39; ? &#39;text/css&#39;</td></tr>
<tr><td class="h">26</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: &#39;text/plain&#39;;</td></tr>
<tr><td class="h">27</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},</td></tr>
<tr><td class="h">28</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lazy =&gt; 1);</td></tr>
<tr><td class="h">29</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has replace   =&gt; (is =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">30</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; sub { {} },</td></tr>
<tr><td class="h">31</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lazy =&gt; 1);</td></tr>
<tr><td class="h">32</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has minifier  =&gt; (is =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">33</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; &#39;minify&#39;);</td></tr>
<tr><td class="h">34</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has expire    =&gt; (is =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">35</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; 0);</td></tr>
<tr><td class="h">36</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">has expire_in =&gt; (is =&gt; &#39;rw&#39;,</td></tr>
<tr><td class="h">37</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;default =&gt; 60 * 60 * 24 * 365 * 3); # 3 years</td></tr>
<tr><td class="h">38</td><td colspan="7"></td></tr><tr><td class="h">39</td><td colspan="7"></td></tr><tr><td class="h">40 - 160</td><td colspan="6"></td><td class="s"><pre>=head1 NAME

Catalyst::Controller::Combine - Combine JS/CSS Files

=head1 SYNOPSIS

    # use the helper to create your Controller
    script/myapp_create.pl controller Js Combine

    # or:
    script/myapp_create.pl controller Css Combine

    # DONE. READY FOR USE.

    # Just use it in your template:
    # will deliver all JavaScript files concatenated (in Js-Controller)
    &lt;script type=&quot;text/javascript&quot; src=&quot;/js/file1/file2/.../filex.js&quot;&gt;&lt;/script&gt;

    # will deliver all CSS files concatenated (in Css-Controller)
    &lt;link rel=&quot;stylesheet&quot; type=&quot;text/css&quot; href=&quot;/css/file1/file2/.../filex.css&quot; /&gt;


    # in the generated controller you may add this to allow minification
    # the trick behind is the existence of a sub named &#39;minify&#39;
    # inside your Controller.

    use JavaScript::Minifier::XS qw(minify);
        # or:
    use CSS::Minifier::XS qw(minify);


=head1 DESCRIPTION

Catalyst Controller that concatenates (and optionally minifies) static files
like JavaScript or CSS into a single request. Depending on your configuration,
files are also auto-added with a simple dependency-management.

The basic idea behind concatenation is that all files one Controller should
handle reside in a common directory.

Assuming you have a directory with JavaScript files like:

    root/static/js
     |
     +-- prototype.js
     |
     +-- helpers.js
     |
     +-- site.js

Then you could combine all files in a single tag (assuming your directory for
the Controller is set to &#39;static/js&#39; -- which is the default):

    &lt;script type=&quot;text/javascript&quot; src=&quot;/js/prototype/helpers/site.js&quot;&gt;&lt;/script&gt;

If you add a dependency into your Controller&#39;s config like:

    __PACKAGE__-&gt;config(
        ...
        depend =&gt; {
            helpers =&gt; &#39;prototype&#39;,
            site    =&gt; &#39;helpers&#39;,
        },
        ...
    );

Now, the URI to retrieve the very same JavaScript files can be shortened:

    &lt;script type=&quot;text/javascript&quot; src=&quot;/js/site.js&quot;&gt;&lt;/script&gt;

=head1 CONFIGURATION

A simple configuration of your Controller could look like this:

    __PACKAGE__-&gt;config(
        # the directory to look for files
        # defaults to &#39;static/&lt;&lt;action_namespace&gt;&gt;&#39;
        dir =&gt; &#39;static/js&#39;,

        # the (optional) file extension in the URL
        # defaults to action_namespace
        extension =&gt; &#39;js&#39;,

        # optional dependencies
        depend =&gt; {
            scriptaculous =&gt; &#39;prototype&#39;,
            builder       =&gt; &#39;scriptaculous&#39;,
            effects       =&gt; &#39;scriptaculous&#39;,
            dragdrop      =&gt; &#39;effects&#39;,
            slider        =&gt; &#39;scriptaculous&#39;,
            myscript      =&gt; [ qw(slider dragdrop) ],
        },

        # name of the minifying routine (defaults to &#39;minify&#39;)
        # will be used if present in the package
        minifier =&gt; &#39;minify&#39;,

        # should a HTTP expire header be set? This usually means, 
        # you have to change your filenames, if there a was change!
        expire =&gt; 1,

        # time offset (in seconds), in which the file will expire
        expire_in =&gt; 60 * 60 * 24 * 365 * 3, # 3 years

        # mimetype of response if wanted
        # will be guessed from extension if possible and not given
        # falls back to &#39;text/plain&#39; if not guessable
        mimetype =&gt; &#39;application/javascript&#39;,
    );

=head2 CONFIGURATION OPTIONS

TODO: writeme...

=head1 METHODS

=head2 BUILD

constructor for this Moose-driven class

=cut</pre></td></tr>
<tr><td class="h">161</td><td colspan="7"></td></tr><tr><td class="h">162</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub BUILD {</td></tr>
<tr><td class="h">163</td><td><div class="c3">13</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L163">13</a></div></td><td><div class="c3">1</div></td><td><div>33686</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">164</td><td><div class="c3">13</div></td><td></td><td></td><td></td><td></td><td><div>103</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $c = $self-&gt;_app;</td></tr>
<tr><td class="h">165</td><td colspan="7"></td></tr><tr><td class="h">166</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;### THIS STUPID BLOCK BREAKS TESTS UNDER DIFFERENT C::MOP / MOOSE VERSIONS...</td></tr>
<tr><td class="h">167</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;### $self-&gt;dir wants to know action_namespace...</td></tr>
<tr><td class="h">168</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# $c-&gt;log-&gt;warn(ref($self) . &quot; - directory &#39;&quot; . $self-&gt;dir . &quot;&#39; not present.&quot;)</td></tr>
<tr><td class="h">169</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#     if (!-d $c-&gt;path_to(&#39;root&#39;, $self-&gt;dir));</td></tr>
<tr><td class="h">170</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">171</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# $c-&gt;log-&gt;debug(ref($self) . &quot; - &quot; .</td></tr>
<tr><td class="h">172</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#                &quot;directory: &#39;&quot; . $self-&gt;dir . &quot;&#39;, &quot; .</td></tr>
<tr><td class="h">173</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#                &quot;extension: &#39;&quot; . $self-&gt;extension . &quot;&#39;, &quot; .</td></tr>
<tr><td class="h">174</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#                &quot;mimetype: &#39;&quot; . $self-&gt;mimetype . &quot;&#39;, &quot; .</td></tr>
<tr><td class="h">175</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#                &quot;minifier: &#39;&quot; . $self-&gt;minifier . &quot;&#39;&quot;)</td></tr>
<tr><td class="h">176</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#     if ($c-&gt;debug);</td></tr>
<tr><td class="h">177</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">178</td><td colspan="7"></td></tr><tr><td class="h">179 - 207</td><td colspan="6"></td><td class="s"><pre>=head2 do_combine :Action

the C&lt;do_combine&gt; Action-method may be used like this (eg in YourApp:Controller:Js):

    sub default :Path {
        my $self = shift;
        my $c = shift;

        $c-&gt;forward(&#39;do_combine&#39;);
    }

However, a predeclared C&lt;default&gt; method like this is already present -- see
below.

All files in the remaining URL will be concatenated to a single resulting
stream and optionally minified if a sub named &#39;minify&#39; in your Controller&#39;s
package namespace exists.

Thus, inside your Controller a simple

    # for JavaScript you may do
    use JavaScript::Minifier::XS qw(minify);

    # for CSS quite similar:
    use CSS::Minifier::XS qw(minify);

will do the job and auto-minify the stream.

=cut</pre></td></tr>
<tr><td class="h">208</td><td colspan="7"></td></tr><tr><td class="h">209</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub do_combine :Action {</td></tr>
<tr><td class="h">210</td><td><div class="c3">18</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L210">18</a></div></td><td><div class="c3">1</div></td><td><div>3360</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">211</td><td><div class="c3">18</div></td><td></td><td></td><td></td><td></td><td><div>16</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $c = shift;</td></tr>
<tr><td class="h">212</td><td colspan="7"></td></tr><tr><td class="h">213</td><td><div class="c3">18</div></td><td></td><td></td><td></td><td></td><td><div>51</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;_collect_files($c, @_);</td></tr>
<tr><td class="h">214</td><td colspan="7"></td></tr><tr><td class="h">215</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">216</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# concatenate</td></tr>
<tr><td class="h">217</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">218</td><td><div class="c3">17</div></td><td></td><td></td><td></td><td></td><td><div>19</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $mtime = 0;</td></tr>
<tr><td class="h">219</td><td><div class="c3">17</div></td><td></td><td></td><td></td><td></td><td><div>25</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $response = &#39;&#39;;</td></tr>
<tr><td class="h">220</td><td><div class="c3">17</div><div class="c3">17</div></td><td></td><td></td><td></td><td></td><td><div>15</div><div>36</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $file_path (@{$self-&gt;{files}}) {</td></tr>
<tr><td class="h">221</td><td><div class="c3">22</div></td><td><div class="c0" title="-/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L221">0</a></div></td><td></td><td></td><td></td><td><div>924</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (open(my $file, &#39;&lt;&#39;, $file_path)) {</td></tr>
<tr><td class="h">222</td><td><div class="c3">22</div></td><td></td><td></td><td></td><td></td><td><div>3085</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;local $/ = undef;</td></tr>
<tr><td class="h">223</td><td><div class="c3">22</div></td><td></td><td></td><td></td><td></td><td><div>417</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $file_content = &lt;$file&gt;;</td></tr>
<tr><td class="h">224</td><td colspan="7"></td></tr><tr><td class="h">225</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# do replacements if wanted</td></tr>
<tr><td class="h">226</td><td><div class="c3">22</div></td><td><div class="c0" title="-/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L226">0</a></div></td><td></td><td></td><td></td><td><div>166</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if (exists($self-&gt;{replacement_for}-&gt;{$file_path})) {</td></tr>
<tr><td class="h">227</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @replacement = (</td></tr>
<tr><td class="h">228</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# poor man&#39;s deep-copy</td></tr>
<tr><td class="h">229</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;@{$self-&gt;{replacement_for}-&gt;{$file_path}}</td></tr>
<tr><td class="h">230</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;);</td></tr>
<tr><td class="h">231</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;while (my ($regex, $replace) = splice(@replacement,0,2)) {</td></tr>
<tr><td class="h">232</td><td><div class="c0">0</div><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$file_content =~ s{$regex}{qq{qq{$replace}}}gmsee;</td></tr>
<tr><td class="h">233</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">234</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">235</td><td colspan="7"></td></tr><tr><td class="h">236</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# append to output stream</td></tr>
<tr><td class="h">237</td><td><div class="c3">22</div></td><td></td><td></td><td></td><td></td><td><div>1178</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$response .= $file_content;</td></tr>
<tr><td class="h">238</td><td><div class="c3">22</div></td><td></td><td></td><td></td><td></td><td><div>266</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;close($file);</td></tr>
<tr><td class="h">239</td><td><div class="c3">22</div></td><td></td><td></td><td></td><td></td><td><div>149</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mtime = max($mtime, (stat $file_path)-&gt;mtime);</td></tr>
<tr><td class="h">240</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">241</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# silently ignore any errors that might occur</td></tr>
<tr><td class="h">242</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">243</td><td colspan="7"></td></tr><tr><td class="h">244</td><td><div class="c3">17</div></td><td><div class="c0" title="-/F"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L244">50</a></div></td><td></td><td></td><td></td><td><div>2350</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;die &#39;no files given for combining&#39; if (!$mtime);</td></tr>
<tr><td class="h">245</td><td colspan="7"></td></tr><tr><td class="h">246</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">247</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# deliver -- at least an empty line to make catalyst happy ;-)</td></tr>
<tr><td class="h">248</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">249</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $minifier = $self-&gt;can($self-&gt;minifier)</td></tr>
<tr><td class="h">250</td><td><div class="c3">17</div><div class="c3">15</div></td><td></td><td><div class="c0"><a href="lib-Catalyst-Controller-Combine-pm--condition.html#L250">0</a></div></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L250">15</a></div></td><td></td><td><div>119</div><div>195</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| sub { $_[0] }; # simple identity function</td></tr>
<tr><td class="h">251</td><td><div class="c3">17</div></td><td><div class="c0" title="T/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L251">50</a></div></td><td></td><td></td><td></td><td><div>335</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$c-&gt;response-&gt;headers-&gt;content_type($self-&gt;mimetype)</td></tr>
<tr><td class="h">252</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($self-&gt;mimetype);</td></tr>
<tr><td class="h">253</td><td><div class="c3">17</div></td><td><div class="c0" title="T/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L253">50</a></div></td><td></td><td></td><td></td><td><div>1592</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$c-&gt;response-&gt;headers-&gt;last_modified($mtime)</td></tr>
<tr><td class="h">254</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($mtime);</td></tr>
<tr><td class="h">255</td><td colspan="7"></td></tr><tr><td class="h">256</td><td><div class="c3">17</div></td><td><div class="c3" title="T/F"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L256">100</a></div></td><td><div class="c0"><a href="lib-Catalyst-Controller-Combine-pm--condition.html#L256">67</a></div></td><td></td><td></td><td><div>11765</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ($self-&gt;{expire} &amp;&amp; $self-&gt;{expire_in}) {</td></tr>
<tr><td class="h">257</td><td><div class="c3">2</div></td><td></td><td></td><td></td><td></td><td><div>11</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$c-&gt;response-&gt;headers-&gt;expires(time() + $self-&gt;{expire_in});</td></tr>
<tr><td class="h">258</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">259</td><td colspan="7"></td></tr><tr><td class="h">260</td><td><div class="c3">17</div></td><td></td><td></td><td></td><td></td><td><div>259</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$c-&gt;response-&gt;body($minifier-&gt;($response) . &quot;\n&quot;);</td></tr>
<tr><td class="h">261</td><td><div class="c3">7</div><div class="c3">7</div><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L261">7</a></div></td><td></td><td><div>30</div><div>5</div><div>74</div></td><td class="s">}</td></tr>
<tr><td class="h">262</td><td colspan="7"></td></tr><tr><td class="h">263 - 269</td><td colspan="6"></td><td class="s"><pre>=head2 default :Path

a standard handler for your application&#39;s controller

maps to the path_prefix of your actual controller and consumes the entire URI

=cut</pre></td></tr>
<tr><td class="h">270</td><td colspan="7"></td></tr><tr><td class="h">271</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub default :Path {</td></tr>
<tr><td class="h">272</td><td><div class="c3">11</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L272">11</a></div></td><td><div class="c3">1</div></td><td><div>85178</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">273</td><td><div class="c3">11</div></td><td></td><td></td><td></td><td></td><td><div>20</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $c = shift;</td></tr>
<tr><td class="h">274</td><td colspan="7"></td></tr><tr><td class="h">275</td><td><div class="c3">11</div></td><td></td><td></td><td></td><td></td><td><div>57</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$c-&gt;forward(&#39;do_combine&#39;);</td></tr>
<tr><td class="h">276</td><td><div class="c3">7</div><div class="c3">7</div><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L276">7</a></div></td><td></td><td><div>30893</div><div>11</div><div>51</div></td><td class="s">}</td></tr>
<tr><td class="h">277</td><td colspan="7"></td></tr><tr><td class="h">278 - 329</td><td colspan="6"></td><td class="s"><pre>=head2 uri_for :Private

handle uri_for requests (not intentionally a Catalyst-feature :-) requires a
patched C&lt;uri_for&gt; method in your app! my one looks like the sub below.

If this method is used, the URI will only contain files that will not
automatically get added in by dependency resolution. Also, a simple
GET-parameter is added that reflects the unix-timestamp of the most resent
file that will be in the list of combined files. This helps the browser
to do proper caching even if files will change. Admittedly this is most of
the time needed during development.

    # in my app.pm:
    sub uri_for {
        my $c = shift;
        my $path = shift;
        my @args = @_;

        if (blessed($path) &amp;&amp; $path-&gt;class &amp;&amp; $path-&gt;class-&gt;can(&#39;uri_for&#39;)) {
            #
            # the path-argument was a component that can help
            # let the controller handle this for us
            #   believe me, it can do it!
            #
            return $c-&gt;component($path-&gt;class)-&gt;uri_for($c, $path, @args);
        }

        #
        # otherwise fall back into the well-known behavior
        #
        $c-&gt;next::method($path, @args);
    }

    # alternatively, using Catalyst 5.8 you may do this:
    around &#39;uri_for&#39; =&gt; sub {
        my $orig = shift;
        my $c = shift;
        my $path = shift;
        my @args = @_;

        if (blessed($path) &amp;&amp; $path-&gt;class &amp;&amp; $path-&gt;class-&gt;can(&#39;uri_for&#39;)) {
            #
            # let the controller handle this for us
            #   believe me, it can do it!
            #
            return $c-&gt;component($path-&gt;class)-&gt;uri_for($c, $path, @args);
        }

        return $c-&gt;$orig($path, @args);
    };

=cut</pre></td></tr>
<tr><td class="h">330</td><td colspan="7"></td></tr><tr><td class="h">331</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub uri_for :Private {</td></tr>
<tr><td class="h">332</td><td><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L332">7</a></div></td><td><div class="c3">1</div></td><td><div>336</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">333</td><td><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>5</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $c = shift;</td></tr>
<tr><td class="h">334</td><td><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>7</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $path = shift; # actually an action...</td></tr>
<tr><td class="h">335</td><td><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>10</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @args = @_;</td></tr>
<tr><td class="h">336</td><td colspan="7"></td></tr><tr><td class="h">337</td><td><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>35</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $actual_path = $c-&gt;dispatcher-&gt;uri_for_action($path);</td></tr>
<tr><td class="h">338</td><td><div class="c3">7</div></td><td><div class="c0" title="-/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L338">0</a></div></td><td></td><td></td><td></td><td><div>1111</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$actual_path = &#39;/&#39; if $actual_path eq &#39;&#39;;</td></tr>
<tr><td class="h">339</td><td colspan="7"></td></tr><tr><td class="h">340</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">341</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# generate max mtime as query value for the uri</td></tr>
<tr><td class="h">342</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">343</td><td><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>52</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;_collect_files($c, @args);</td></tr>
<tr><td class="h">344</td><td><div class="c3">7</div><div class="c3">11</div><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>6</div><div>481</div><div>10</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $mtime = max map { (stat $_)-&gt;mtime } @{$self-&gt;{files}};</td></tr>
<tr><td class="h">345</td><td colspan="7"></td></tr><tr><td class="h">346</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">347</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# get rid of redundancies as dependency rules will</td></tr>
<tr><td class="h">348</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# add them in at fulfilment of the real request...</td></tr>
<tr><td class="h">349</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">350</td><td><div class="c3">7</div><div class="c3">11</div><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>799</div><div>28</div><div>10</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my @parts = grep {!$self-&gt;{seen}-&gt;{$_}} @{$self-&gt;{parts}};</td></tr>
<tr><td class="h">351</td><td><div class="c3">7</div></td><td><div class="c0" title="T/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L351">50</a></div></td><td></td><td></td><td></td><td><div>52</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$parts[-1] .= &#39;.&#39; . $self-&gt;extension if (scalar(@parts));</td></tr>
<tr><td class="h">352</td><td colspan="7"></td></tr><tr><td class="h">353</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">354</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# CAUTION: $actual_path must get stringified!</td></tr>
<tr><td class="h">355</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# otherwise bad loops and misbehavior would occur.</td></tr>
<tr><td class="h">356</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">357</td><td colspan="7"></td></tr><tr><td class="h">358</td><td><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>79</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$c-&gt;uri_for(&quot;$actual_path&quot;, @parts, {m =&gt; $mtime});</td></tr>
<tr><td class="h">359</td><td><div class="c3">7</div><div class="c3">7</div><div class="c3">7</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L359">7</a></div></td><td></td><td><div>6179</div><div>7</div><div>38</div></td><td class="s">}</td></tr>
<tr><td class="h">360</td><td colspan="7"></td></tr><tr><td class="h">361</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">#</td></tr>
<tr><td class="h">362</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># collect all files</td></tr>
<tr><td class="h">363</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">#</td></tr>
<tr><td class="h">364</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub _collect_files {</td></tr>
<tr><td class="h">365</td><td><div class="c3">34</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L365">34</a></div></td><td></td><td><div>79</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">366</td><td><div class="c3">34</div></td><td></td><td></td><td></td><td></td><td><div>34</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $c = shift;</td></tr>
<tr><td class="h">367</td><td colspan="7"></td></tr><tr><td class="h">368</td><td><div class="c3">34</div></td><td></td><td></td><td></td><td></td><td><div>196</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $ext = $self-&gt;extension;</td></tr>
<tr><td class="h">369</td><td><div class="c3">34</div></td><td></td><td></td><td></td><td></td><td><div>1287</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;{parts} = [];            # list of plain file names</td></tr>
<tr><td class="h">370</td><td><div class="c3">34</div></td><td></td><td></td><td></td><td></td><td><div>59</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;{files} = [];            # list of full paths</td></tr>
<tr><td class="h">371</td><td><div class="c3">34</div></td><td></td><td></td><td></td><td></td><td><div>170</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;{replacement_for} = {};  # replacements for every full path</td></tr>
<tr><td class="h">372</td><td><div class="c3">34</div></td><td></td><td></td><td></td><td></td><td><div>80</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;{seen}  = {}; # easy lookup of parts and count of dependencies</td></tr>
<tr><td class="h">373</td><td><div class="c3">34</div></td><td></td><td></td><td></td><td></td><td><div>62</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $file (@_) {</td></tr>
<tr><td class="h">374</td><td><div class="c3">46</div></td><td></td><td></td><td></td><td></td><td><div>204</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $base_name = $file;</td></tr>
<tr><td class="h">375</td><td><div class="c3">46</div></td><td></td><td></td><td></td><td></td><td><div>190</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$base_name =~ s{\.$ext\z}{}xms;</td></tr>
<tr><td class="h">376</td><td colspan="7"></td></tr><tr><td class="h">377</td><td><div class="c3">46</div></td><td></td><td></td><td></td><td></td><td><div>140</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;_check_dependencies($c, $base_name, [&#39;&#39;, &quot;.$ext&quot;]);</td></tr>
<tr><td class="h">378</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">379</td><td colspan="7"></td></tr><tr><td class="h">380</td><td><div class="c3">33</div></td><td></td><td></td><td></td><td></td><td><div>489</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">381</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">382</td><td colspan="7"></td></tr><tr><td class="h">383</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">#</td></tr>
<tr><td class="h">384</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s"># check dependencies on files</td></tr>
<tr><td class="h">385</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">#</td></tr>
<tr><td class="h">386</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">sub _check_dependencies {</td></tr>
<tr><td class="h">387</td><td><div class="c3">57</div></td><td></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--subroutine.html#L387">57</a></div></td><td></td><td><div>56</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $self = shift;</td></tr>
<tr><td class="h">388</td><td><div class="c3">57</div></td><td></td><td></td><td></td><td></td><td><div>41</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $c = shift;</td></tr>
<tr><td class="h">389</td><td><div class="c3">57</div></td><td></td><td></td><td></td><td></td><td><div>46</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $base_name = shift;</td></tr>
<tr><td class="h">390</td><td><div class="c3">57</div></td><td></td><td></td><td></td><td></td><td><div>43</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $extensions = shift;</td></tr>
<tr><td class="h">391</td><td><div class="c3">57</div></td><td></td><td><div class="c3"><a href="lib-Catalyst-Controller-Combine-pm--condition.html#L391">100</a></div></td><td></td><td></td><td><div>271</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $depends = shift || 0;</td></tr>
<tr><td class="h">392</td><td colspan="7"></td></tr><tr><td class="h">393</td><td><div class="c3">57</div></td><td></td><td></td><td></td><td></td><td><div>397</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $dependency_for = $self-&gt;depend;</td></tr>
<tr><td class="h">394</td><td colspan="7"></td></tr><tr><td class="h">395</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">396</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# check if we already saw this file. Update dependency flag</td></tr>
<tr><td class="h">397</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">398</td><td><div class="c3">57</div></td><td><div class="c3" title="T/F"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L398">100</a></div></td><td></td><td></td><td></td><td><div>488</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if (exists($self-&gt;{seen}-&gt;{$base_name})) {</td></tr>
<tr><td class="h">399</td><td><div class="c3">7</div></td><td></td><td><div class="c0"><a href="lib-Catalyst-Controller-Combine-pm--condition.html#L399">67</a></div></td><td></td><td></td><td><div>15</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;{seen}-&gt;{$base_name} ||= $depends;</td></tr>
<tr><td class="h">400</td><td><div class="c3">7</div></td><td></td><td></td><td></td><td></td><td><div>19</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">401</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">402</td><td colspan="7"></td></tr><tr><td class="h">403</td><td><div class="c3">50</div></td><td><div class="c3" title="T/F"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L403">100</a></div></td><td><div class="c0"><a href="lib-Catalyst-Controller-Combine-pm--condition.html#L403">50</a></div></td><td></td><td></td><td><div>353</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;if ($dependency_for &amp;&amp;</td></tr>
<tr><td class="h">404</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ref($dependency_for) eq &#39;HASH&#39; &amp;&amp;</td></tr>
<tr><td class="h">405</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exists($dependency_for-&gt;{$base_name})) {</td></tr>
<tr><td class="h">406</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">407</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# we have a dependency -- resolve it.</td></tr>
<tr><td class="h">408</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">409</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @depend_on = ref($dependency_for-&gt;{$base_name}) eq &#39;ARRAY&#39;</td></tr>
<tr><td class="h">410</td><td><div class="c3">11</div></td><td><div class="c0" title="-/F"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L410">50</a></div></td><td></td><td></td><td></td><td><div>59</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;? @{$dependency_for-&gt;{$base_name}}</td></tr>
<tr><td class="h">411</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;: $dependency_for-&gt;{$base_name};</td></tr>
<tr><td class="h">412</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;_check_dependencies($c, $_, $extensions, 1)</td></tr>
<tr><td class="h">413</td><td><div class="c3">11</div><div class="c3">11</div></td><td></td><td></td><td></td><td></td><td><div>9</div><div>40</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for @depend_on;</td></tr>
<tr><td class="h">414</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">415</td><td colspan="7"></td></tr><tr><td class="h">416</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">417</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;# add the file if existing</td></tr>
<tr><td class="h">418</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;#</td></tr>
<tr><td class="h">419</td><td><div class="c3">50</div></td><td></td><td></td><td></td><td></td><td><div>377</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;my $dir = $c-&gt;path_to(&#39;root&#39;, $self-&gt;dir);</td></tr>
<tr><td class="h">420</td><td><div class="c3">50</div><div class="c3">100</div><div class="c3">50</div></td><td></td><td></td><td></td><td></td><td><div>12117</div><div>18331</div><div>62</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;foreach my $file_path (map { $dir-&gt;file(&quot;$base_name$_&quot;) } @{$extensions}) {</td></tr>
<tr><td class="h">421</td><td><div class="c3">97</div></td><td><div class="c0" title="-/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L421">0</a></div></td><td></td><td></td><td></td><td><div>20064</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if (!-f $file_path);</td></tr>
<tr><td class="h">422</td><td colspan="7"></td></tr><tr><td class="h">423</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# the file we want exists. Time to do a security check</td></tr>
<tr><td class="h">424</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# hint: a call to resolve() will die under windows</td></tr>
<tr><td class="h">425</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#       if the path requested does not exist on the filesystem.</td></tr>
<tr><td class="h">426</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#       therefore, we check as late as possible</td></tr>
<tr><td class="h">427</td><td><div class="c3">44</div></td><td><div class="c0" title="-/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L427">0</a></div></td><td></td><td></td><td></td><td><div>2885</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$dir-&gt;subsumes($file_path-&gt;resolve)</td></tr>
<tr><td class="h">428</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or die &#39;security violation - tried to access file outside of: &#39;</td></tr>
<tr><td class="h">429</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;. $self-&gt;dir();</td></tr>
<tr><td class="h">430</td><td colspan="7"></td></tr><tr><td class="h">431</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# looks like we are secure -- are there any secret unicodes</td></tr>
<tr><td class="h">432</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# we forgot to double-check? *g*</td></tr>
<tr><td class="h">433</td><td><div class="c3">43</div><div class="c3">43</div></td><td></td><td></td><td></td><td></td><td><div>68570</div><div>90</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @{$self-&gt;{parts}}, $base_name;</td></tr>
<tr><td class="h">434</td><td><div class="c3">43</div><div class="c3">43</div></td><td></td><td></td><td></td><td></td><td><div>33</div><div>57</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @{$self-&gt;{files}}, $file_path;</td></tr>
<tr><td class="h">435</td><td><div class="c3">43</div></td><td></td><td></td><td></td><td></td><td><div>73</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$self-&gt;{seen}-&gt;{$base_name} = $depends;</td></tr>
<tr><td class="h">436</td><td colspan="7"></td></tr><tr><td class="h">437</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# check replacements</td></tr>
<tr><td class="h">438</td><td><div class="c3">43</div></td><td></td><td></td><td></td><td></td><td><div>640</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return if (!$self-&gt;replace </td></tr>
<tr><td class="h">439</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| ref($self-&gt;replace) ne &#39;HASH&#39; </td></tr>
<tr><td class="h">440</td><td><div class="c3">43</div></td><td><div class="c0" title="-/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L440">0</a></div></td><td><div class="c0"><a href="lib-Catalyst-Controller-Combine-pm--condition.html#L440">0</a></div></td><td></td><td></td><td><div>268</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| !scalar(keys(%{$self-&gt;replace})));</td></tr>
<tr><td class="h">441</td><td><div class="c0">0</div><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;foreach my $glob (keys(%{$self-&gt;replace})) {</td></tr>
<tr><td class="h">442</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L442">0</a></div></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if (!match_glob($glob, $base_name));</td></tr>
<tr><td class="h">443</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $replacements = $self-&gt;replace-&gt;{$glob};</td></tr>
<tr><td class="h">444</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next if (!$replacements </td></tr>
<tr><td class="h">445</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| ref($replacements) ne &#39;ARRAY&#39; </td></tr>
<tr><td class="h">446</td><td><div class="c0">0</div></td><td><div class="c0" title="-/-"><a href="lib-Catalyst-Controller-Combine-pm--branch.html#L446">0</a></div></td><td><div class="c0"><a href="lib-Catalyst-Controller-Combine-pm--condition.html#L446">0</a></div></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|| !scalar(@{$replacements}));</td></tr>
<tr><td class="h">447</td><td><div class="c0">0</div><div class="c0">0</div><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div><div>0</div><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;push @{$self-&gt;{replacement_for}-&gt;{$file_path}}, @{$replacements};</td></tr>
<tr><td class="h">448</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">449</td><td colspan="7"></td></tr><tr><td class="h">450</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;# done</td></tr>
<tr><td class="h">451</td><td><div class="c0">0</div></td><td></td><td></td><td></td><td></td><td><div>0</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">452</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;}</td></tr>
<tr><td class="h">453</td><td colspan="7"></td></tr><tr><td class="h">454</td><td><div class="c3">6</div></td><td></td><td></td><td></td><td></td><td><div>418</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;$c-&gt;log-&gt;warn(&quot;$base_name.* --&gt; NOT EXISTING, ignored&quot;);</td></tr>
<tr><td class="h">455</td><td><div class="c3">6</div></td><td></td><td></td><td></td><td></td><td><div>401</div></td><td class="s">&nbsp;&nbsp;&nbsp;&nbsp;return;</td></tr>
<tr><td class="h">456</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">}</td></tr>
<tr><td class="h">457</td><td colspan="7"></td></tr><tr><td class="h">458 - 475</td><td colspan="6"></td><td class="s"><pre>=head1 GOTCHAS

Please do not use C&lt;namespace::autoclean&gt; if you intend to enable a minifier.
The black magic behind the scenes tries to determine your intention to minify
by searching for a sub called C&lt;minify&gt; inside the controller&#39;s package.
However, this sub is imported by eg C&lt;JavaScript::Minifier::XS&gt; and will be
kicked out of the controller by C&lt;namespace::autoclean&gt;.

=head1 AUTHOR

Wolfgang Kinkeldei, E&lt;lt&gt;wolfgang@kinkeldei.deE&lt;gt&gt;

=head1 LICENSE

This library is free software, you can redistribute it and/or modify
it under the same terms as Perl itself.

=cut</pre></td></tr>
<tr><td class="h">476</td><td colspan="7"></td></tr><tr><td class="h">477</td><td></td><td></td><td></td><td></td><td></td><td></td><td class="s">1;</td></tr>
</table>
</body>
</html>