CINXE.COM

PerlMonks - The Monastery Gates

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <!-- Took this out for IE6ites "http://www.w3.org/TR/REC-html40/loose.dtd" --> <html lang="en"> <head id="stdcontainer"> <title> PerlMonks - The Monastery Gates </title> <link rel="canonical" href="https://www.perlmonks.org/?node_id=131" /> <!-- Theme : Web safe blue PerlMonks Theme --> <script language="javascript" type="text/javascript" src="?node=list%20replies%20toggle%20javascript" integrity="sha384-6jdBZxT7udN82vOTryPaLwqMohSfDF3HXv3M32KAZ7dOREMdAkYh9ZhoaKCgCXcr" crossorigin="anonymous"></script> <link rel="stylesheet" href="/css/common.css" type="text/css" /> <link rel="stylesheet" href="?node_id=204962" type="text/css" /> <!-- No CSS Link in Display Settings --> <!-- No CSS Data in Display Settings --> <link rel="icon" href="/favicon.ico" /> <meta name = "description" content = "A community committed to sharing Perl knowledge and coding tips. The site contains questions and answers, useful snippets, and a library of code." /> <meta name = "keywords" content = "perl, mod_perl, regular expressions, regexp, CGI, programming, learning, tutorials, questions, answers, examples, node, experience, votes, code" /> </head> <body id="id-131"> <!-- monktainer --> <!-- monkbar2001 --> <table id="monkbar" width="100%" border="0" cellpadding="0" cellspacing="0"> <tr class="bannerrow"> <td align="left" width="100%"> <a href="http://pair.com"> <img src="//promote.pair.com/i/pair-banner-current.gif" height = "60" width = "468" alt = "Beefy Boxes and Bandwidth Generously Provided by pair Networks" /> </a> </td> <td rowspan="2" align="right" valign="bottom"> <!-- Monk Pic Turned Off In User Settings --> </td> </tr> <tr class="monkquip"> <td class="monkquip" valign="bottom" width="100%" > Syntactic Confectionery Delight </td> </tr> <tr class="titlebar"> <td class="titlebar"> <form method="get" action="?" enctype="application/x-www-form-urlencoded" > &nbsp; <input type="text" name="node" id="search_text" size="20" maxlength="300" /> <input class="titlebar" type="submit" value="Search" /> </form> </td> <td class="titlebar" id="mb2001titlebar" align="right" > <a class="titlebar" href="?">PerlMonks</a>&nbsp;&nbsp; </td> </tr> </table> <!-- /monkbar2001 --> <!-- Begin title bar --> <table width="98%" align="center" id="titlebar-top"> <tbody> <tr> <td valign="middle" class="titlechooser"> <!-- node_info_string: (h3)Title and (span)Author --> <h3 class="superdoc">The Monastery Gates</h3> <!-- /node_info_string --> </td> <td valign="top" align="right" class="monktitlebar"> <!-- monktitlebar --> <ul class="topnavmenu inline-list"> <li><a href="?node_id=109">Log&nbsp;in</a></li><li><a href="?node_id=101">Create&nbsp;a&nbsp;new&nbsp;user</a></li> <li><a href="?">The&nbsp;Monastery&nbsp;Gates</a></li> <li><a href="?node=Seekers%20of%20Perl%20Wisdom">Seekers&nbsp;of&nbsp;Perl&nbsp;Wisdom</a></li> <li><a href="?node=Meditations">Meditations</a></li> <li><a href="?node=Cool%20Uses%20for%20Perl">Cool&nbsp;Uses&nbsp;For&nbsp;Perl</a></li> <li><a href="?node=Obfuscated%20Code">Obfuscation</a></li> <li><a href="?node=Tutorials">Tutorials</a></li> <li><a href="?node=Perl%20Poetry">Poetry</a></li> <li><a href="?node=Illuminations">Illuminations</a></li> <li><a href="?node=Reviews">Reviews</a></li> <li><a href="?node=Perl%20News">Perl&nbsp;News</a></li> <li><a href="?node=Recently%20Active%20Threads">Recent&nbsp;Threads</a></li> <li><a href="?node=Newest%20Nodes">Newest&nbsp;Nodes</a></li> <li><a href="?node=Super%20Search">Super&nbsp;Search</a></li> <li><a href="?node=Perl%20Monks%20Discussion">PerlMonks&nbsp;Discussion</a></li> <li><a href="?node=Tidings">What's&nbsp;New</a></li> </ul> <!-- args=(monktitlebar sitedoclet -TOPNAV_SPECIAL <li><a href="?node_id=109">Log&nbsp;in</a></li><li><a href="?node_id=101">Create&nbsp;a&nbsp;new&nbsp;user</a></li>) NODE.title = The Monastery Gates NODE.owner = 485628 N.title = monktitlebar sitedoclet N.owner = 17342 --> <!-- /monktitlebar --> </td> </tr> </tbody> </table> <table width="98%" align="center" id="titlebar-bottom"> <tbody> <tr> <td valign="middle" class="titlechooser"> <!-- node_info_string: (span)Date and (span)Links --> <span class="addlinks">( <a href="?node_id=131">&#091;id://131&#093;</a>=<a href="?node_id=14">superdoc</a>: <a rel="nofollow" href="?node_id=131;displaytype=print">print</a> <a rel="nofollow" href="?displaytype=print;node_id=131;replies=1">w/replies</a>, <a href="?displaytype=xml;node_id=131">xml</a> )</span> <!-- /node_info_string --> </td> <td valign="middle" align="right" class="monktitlebar"> <a href="?node=PerlMonks%20FAQ">Need Help??</a> </td> </tr> </tbody> </table> <!-- End title bar --> <!-- Begin main (monktainer) --> <center> <table width="98%"> <tr> <td width="80%" valign="top" class="main_content"> <!--contained stuff--> <!-- BEGIN general container --> <p align='center'><i>New here?</i> &rArr; <a href="?node_id=17974">I want to ask a question of the Perl Monks. Where do I start?</a></p> <div class="link-back"><b><a href="?node=Offering%20Plate">Donations gladly accepted</a></b></div> <!-- <a href="https://plus.google.com/110429821816504715800" rel="publisher">Google+</a> --> <!-- args=() NODE.title = The Monastery Gates NODE.owner = 485628 N.title = The Monastery Gates sitedoclet N.owner = 17342 --> <blockquote> <h4>Notices:</h4> <table> <tr><th></th><td>&bull; <i><a class="hoverDate" href="?node_id=1131330" title="2025-03-24 08:23:38">erzuuli</a></i></td><!-- <td>[id://651530]</td> --><td>&nldr; <a href="?node=Anonymous%20Monk">Anonymous Monk</a>s are no longer allowed to use Super Search, due to an excessive use of this resource by robots.</td></tr> </table> </blockquote> <p style="text-align:center">If you're new here, please read <a href="?node=PerlMonks%20FAQ">PerlMonks FAQ</a><br /> and <a href="?node=Create%20a%20new%20user">Create a new user</a>!</p><table width="100%" cellpadding="0" cellspacing="0"> <tr class="section_title" width="100%" border="1"> <td class="section_title" width="100%"> Quests </td> </tr> <tr> <td> <table width="100%" border="0" cellpadding="2" cellspacing="0"> <tr width="100%" class="highlight"><td> <a href="?node_id=11163477">poll ideas quest 2025</a><br /> Starts at: Jan 01, 2025 at 00:00<br /> Ends at: Dec 31, 2025 at 23:59<br /> Current Status: Active </td> <td valign="top"> <a href="?node_id=11163477">3 replies</a> </td> <td valign="top"> by <a href="?node_id=275323">pollsters</a> </td> </tr> <tr><td> <ul>First, read <a href="?node=How%20do%20I%20create%20a%20Poll%3F">How do I create a Poll?</a>. Then suggest your poll here. Complete ideas are more likely to be used. <p> Note that links may be used in choices but not in the title.</ul> </td></tr> </table> </td> </tr> </table> <!-- BEGIN listapproved default outer container --> <table width="100%" cellpadding="0" cellspacing="0"> <tr class="section_title" width="100%" border="1"> <td class="section_title" width="100%"> Perl News </td> </tr> <tr> <td> <table width="100%" border="0" cellpadding="2" cellspacing="0"> <!-- BEGIN embed node container --> <TR class="highlight"><TD><a href="?node_id=11164086">CPANSec is now CNA!</a> <BR> on Feb 26, 2025 at 04:05 </TD> <TD valign=top> <a href="?node_id=11164086">0 replies</a> </TD> <TD valign=top> by <a href="?node_id=200365">Tux</a> </TD> </TR> <TR><TD> <ul><p>Years ago, a few people decided during the Perl Toolchain Summit (PTS) that it would be a good idea to join forces, ideas and knowledge and start a group to monitor vulnerabilities in the complete perl ecosystem form core to the smallest CPAN release. The goal was to follow legislation and CVE reports, and help authors in taking actions on not being vulnerable anymore.</p> <p>That group has grown stable over the past years and is now known as <a href="https://security.metacpan.org">CPANSec</a></p> <p>The group has several focus areas, and one of them is channeling CVE vulnerability issues.</p> <p>In that specific goal, a milestone has been reached:</p> <p><a href="https://security.metacpan.org/2025/02/25/cpansec-is-cna-for-perl-and-cpan.html">CPANSec has just been authorized as a CVE Numbering Authority (CNA) for Perl and modules on CPAN</a> &#128227;&#127881;&#129395;&#128076;</p> <hr /> <p>The CPAN Security Group was <a href="https://www.cve.org/Media/News/item/news/2025/02/25/CPAN-Security-Group-Added-as-CNA">authorized by the CVE Program</a> as a CVE Numbering Authority (CNA) on Feb 25, 2025. A CNA assigns and manages CVE identifiers for projects in their scope.</p> <p>Our scope is vulnerabilities in Perl and CPAN Modules (including End-of-Life Perl versions) found at <a href="https://perl.org/">perl.org</a>, <a href="https://cpan.org/">cpan.org</a> or <a href="https://metacpan.org/">metacpan.org</a>, excluding distributions of Perl or CPAN Modules maintained by third-party redistributors.</p> <p>CVE is an international, community-based effort to identify, define and catalog publicly disclosed software vulnerabilities. To learn more about the CVE program, visit <a href="https://www.cve.org">www.cve.org</a>.</p> <h2>Report Vulnerability</h2> <p>Vulnerabilities should be reported according to the security policy of the affected project.</p> <p>For more details, see our guide on how to <a href="https://security.metacpan.org/docs/report.html">Report a Security Issue</a> in Perl and the CPAN ecosystem.</p> <h2>Contact Us</h2> <p>To request a CVE identifier, or to update a CVE we have issued, please send an email to <a href="mailto:cve-request@security.metacpan.org">cve-request@security.metacpan.org</a>.</p> <p>Subscribe to the <a href="https://lists.security.metacpan.org/cve-announce/">cve-announce mailing list</a> to be notified of new CVEs published by us.</p> <p>For questions, disputes or other CNA related queries please use <a href="mailto:cna@security.metacpan.org">cna@security.metacpan.org</a>. Disputes are handled according to the <a href="https://www.cve.org/ResourcesSupport/AllResources/CNARules">CNA rules</a>.</p> <h2>Links</h2> <ul> <li><a href="https://www.cve.org/Media/News/item/news/2025/02/25/CPAN-Security-Group-Added-as-CNA">CVE.org: CPAN Security Group added as CVE Numbering Authority (CNA)</a></li> <li><a href="https://www.cve.org/PartnerInformation/ListofPartners/partner/CPANSec">CVE.org: Partner Information - CPAN Security Group</a></li> <li><a href="https://www.cve.org/ResourcesSupport/AllResources/CNARules">CVE.org: CVE Numbering Authority (CNA) Operational Rules</a></li> <li><a href="https://security.metacpan.org/docs/report.html">Report Security Issue</a></li> <li><a href="https://lists.security.metacpan.org/cve-announce/">cve-announce mailing list</a></li> <li><a href="https://security.metacpan.org/docs/cna-disclosure-policy.html">CNA Disclosure Policy</a></li> </ul> <!-- Node text goes above. Div tags should contain sig only --> <div class="pmsig"><div class="pmsig-200365"> <br /> Enjoy, Have FUN! H.Merijn </div></div></ul> </TD></TR> <!-- END embed node container --> <!-- BEGIN embed node container --> <TR class="highlight"><TD><a href="?node_id=11164084">PDL::Stats 0.854 released</a> <BR> on Feb 25, 2025 at 14:11 </TD> <TD valign=top> <a href="?node_id=11164084">0 replies</a> </TD> <TD valign=top> by <a href="?node_id=1068773">etj</a> </TD> </TR> <TR><TD> <ul>Significant changes in recent times: <ul> <li><a href="https://rt.cpan.org/Ticket/Display.html?id=97925">https://rt.cpan.org/Ticket/Display.html?id=97925</a> has been fixed: now anova_rptd works with mixed-model designs <li>There's now a demo at <a href="https://pdl.perl.org/?page=demos/stats">https://pdl.perl.org/?page=demos/stats</a> <li>The plotting functions now use <a href="https://metacpan.org/pod/PDL%3A%3AGraphics%3A%3ASimple">PDL::Graphics::Simple</a> (which facilitates generating the above) <li>The plotting functions have also had a tidy-up, and now include plotting categorical anova data with stripcharts <li>It uses the new PDL 2.096+ "lib/*.pd" format so it builds quicker </ul> Any problems, please let us know by opening a GitHub issue, joining the IRC channel (both linked on the <a href="https://metacpan.org/pod/PDL%3A%3AStats">PDL::Stats</a> page) or emailing the pdl-general list.</ul> </TD></TR> <!-- END embed node container --> </table> </td> </tr> </table> <!-- END listapproved default outer container --> <table width="100%" cellpadding="0" cellspacing="0"> <tr class="section_title" width="100%" border="1"> <td class="section_title" width="100%"> Supplications </td> </tr> <tr> <td> <table width="100%" border="0" cellpadding="2" cellspacing="0"> <!-- 1 reply --> <!-- Begin Post --> <!-- embed node with vote container --> <tr class="post-head post_head"> <td valign="top" style="padding-left:.2em"> <!-- TITLE --> <a id ="post-head-id11164623" name="post-head-id11164623" href="?node_id=11164623" >Undefined import name priority issue?</a> <br/> <!-- REPLIES --> 1 direct reply &mdash; <a href="?node_id=11164623">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=1145534">sectokia</a> <br/> <!-- DATE --> on Apr 07, 2025 at 21:39 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> <!-- anonymonk cant vote --> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul>Hi Monks, Given 'mylib/json.pm': <pre class="code"><div class='codeblock'><tt class='codetext'> package mylib::json; use Exporter &#39;import&#39;; our @EXPORT=qw(jsonEncode); use JSON::XS; sub jsonEncode($) { my ($o) = @_; my $j = undef; eval { $j = JSON::XS-&gt;new-&gt;encode($o); }; return $@ ? undef : $j; } </tt></div><div class='embed-code-dl'><a href="?part=1;abspart=1;displaytype=displaycode;node_id=11164623">&#91;download&#93;</a></div></pre> And 'mylib.pm': <pre class="code"><div class='codeblock'><tt class='codetext'> package mylib; use Exporter &#39;import&#39;; use lib &#39;mylib&#39;; use mylib::json; our @EXPORT = ( @mylib::json::EXPORT ); </tt></div><div class='embed-code-dl'><a href="?part=2;abspart=1;node_id=11164623;displaytype=displaycode">&#91;download&#93;</a></div></pre> Then the following 'test.pl' works fine: <pre class="code"><div class='codeblock'><tt class='codetext'> use strict; use warnings; use lib &#39;.&#39;; use mylib; print jsonEncode({foo =&gt; &#39;bar&#39;}); </tt></div><div class='embed-code-dl'><a href="?part=3;abspart=1;node_id=11164623;displaytype=displaycode">&#91;download&#93;</a></div></pre> However once I add 'use JSON::WebToken' module I get an issue: <pre class="code"><div class='codeblock'><tt class='codetext'> use strict; use warnings; use lib &#39;.&#39;; use mylib; use JSON::WebToken; print jsonEncode({foo =&gt; &#39;bar&#39;}); </tt></div><div class='embed-code-dl'><a href="?node_id=11164623;displaytype=displaycode;abspart=1;part=4">&#91;download&#93;</a></div></pre> <p>This warns:</p> <pre class="code"><div class='codeblock'><tt class='codetext'>Attempt to call undefined import method with arguments (&quot;encode_json&quot; <span class="line-breaker"> <font color="red">+</font></span>...) via package &quot;JSON&quot; (Perhaps you forgot to load the package?) at <span class="line-breaker"> <font color="red">+</font></span>C:/Strawberry/perl/site/lib/JSON/WebToken.pm line 12. </tt></div><div class='embed-code-dl'><a href="?part=5;node_id=11164623;displaytype=displaycode;abspart=1">&#91;download&#93;</a></div></pre> <p>I don't understand what I am doing with mylib that impacts what JSON::WebToken does? Without mylib JSON::WebToken is working fine.</p> </ul> </td> </tr> <!-- End Post --> <!-- 2 replies --> <!-- Begin Post --> <!-- embed node with vote container --> <tr class="post-head post_head"> <td valign="top" style="padding-left:.2em"> <!-- TITLE --> <a id ="post-head-id11164618" name="post-head-id11164618" href="?node_id=11164618" >Failed match not stored</a> <br/> <!-- REPLIES --> 2 direct replies &mdash; <a href="?node_id=11164618">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=957973">BillKSmith</a> <br/> <!-- DATE --> on Apr 07, 2025 at 16:09 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> <!-- anonymonk cant vote --> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul>The match operator returns an (unspecified)false value when the match fails. Why is that value not stored in this case? <pre class="code"><div class='codeblock'><tt class='codetext'>use strict; use warnings; use version &#39;5.38&#39;; use feature &#39;say&#39;; use Test::More tests=&gt;1; my @arry1 = (&#39;string&#39;=~ m/str/, &#39;second&#39;); my @arry2 = (&#39;string&#39;=~ m/foo/, &#39;second&#39;); # no value stored for failed match. is $arry2&#91;1&#93;, $arry1&#91;1&#93;; </tt></div><div class='embed-code-dl'><a href="?node_id=11164618;displaytype=displaycode;abspart=1;part=1">&#91;download&#93;</a></div></pre> <p>RESULT</p> <pre class="code"><div class='codeblock'><tt class='codetext'>not ok 1 # Failed test at tryit2.pl line 10 # got: undef # expected: &#39;second&#39; # Looks like you failed 1 test of 1. </tt></div><div class='embed-code-dl'><a href="?part=2;abspart=1;node_id=11164618;displaytype=displaycode">&#91;download&#93;</a></div></pre> <!-- Node text goes above. Div tags should contain sig only --> <div class="pmsig"><div class="pmsig-957973"> Bill </div></div></ul> </td> </tr> <!-- End Post --> <!-- 5 replies --> <!-- Begin Post --> <!-- embed node with vote container --> <tr class="post-head post_head"> <td valign="top" style="padding-left:.2em"> <!-- TITLE --> <a id ="post-head-id11164609" name="post-head-id11164609" href="?node_id=11164609" >(OT) Tracking Issues, Requirements, Tests</a> <br/> <!-- REPLIES --> 5 direct replies &mdash; <a href="?node_id=11164609">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=747201">afoken</a> <br/> <!-- DATE --> on Apr 07, 2025 at 04:41 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> <!-- anonymonk cant vote --> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul><p>Hi!</p> <p>I'm searching for a sane tracking software, for developing medical devices. Let me explain:</p> <p>At work, we are currently using a really old version of Jira, with add-ons for tracking requirements and product tests. It's so f*ed up that all attempts to update it fail. Updating was never easy, but the last available installer/updater package actively destroys configuration and database, rendering the installation unusable. The fine print: You need to be at the latest version to be able to migrate to the cloud Jira. We can't get to that version. Tech support is not helpful.</p> <p>Now, we running one project in a cloud Jira setup, paid for by our customer. I always thought the user interface of the old server installation was bad, but the cloud user interface is a mine field. Ideally, you run it on a separate computer, with mouse and keyboard disconnected. Only connect them if you really want to interact with it. Because almost any key and any click anywhere on the user interface triggers some action, even in empty spaces. The screen is littered with junk that you don't need, stuff that you need is well hidden. And as if all of that was not worse enough, we completely give up control of the data we enter into the system. Atlassian as a long history of mishandling or deleting user data, and we legally have to keep that data. I don't see any sane way of doing that.</p> <p>So, guess what? I want to get rid of Jira. I don't want to even have to think about migrating existing data from our existing Jira instances to cloud Jira, and I don't want to use cloud Jira. And as much as I would like to, I don't want to write my own system. I want an existing software, running on a local webserver. I would prefer open source software, so we could tweak things if we really need to. I don't think we need much tech support, so a "community support for free, pay for professional support" model (as for Proxmox or Virtualbox) would be ok. We could pay a license fee, but we are a small company. We mostly do small projects, so license fees that costs in the order of an entire project are simply impossible.</p> <p>What do we need?</p> <ul> <li>local installation (no cloud)</li> <li>web-based</li> <li>runs on Linux</li> <li>preferably open source</li> <li>issue tracking</li> <li>requirement tracking</li> <li>tracking test plans and test plan execution (product validation, testing that you fulfilled all requirements)</li> <li>a way to import old (non-cloud) tickets from Jira, including how they are linked - a REST API might be sufficient, so I can scrape data from the existing Jira instances</li> </ul> <p>The classic Bugzilla ticks almost all checkboxes, except that it can't do requirement tracking and test tracking. And it's name is burned because an unloved and unmaintained installation lingered around since well before I was hired. That's clearly not the fault of Bugzilla, but some people are just strange.</p> <p>Before Jira, we (the software developers) starting using Redmine just for tracking issues, with the intention to make the entire company using it. Jira won because Redmine wasn't even invited to the race. Redmine has no requirement and test tracking, but at least it has interfaces to third party tools.</p> <p>A final note: Jira (with pluins) integrates the bugtracker on the one hand and requirement / tests tracking on the other hand into a single software. We are used to it, but we don't need that integration. Some bug tickets may refer to requirements or tests, but that's all. There is no tracking, not even counting. Nobody checks how many bugs a requirement "attracted". It is convienient to just type FOO-123 and it will be converted to a link to a requirement, just like typing FOO-456 will be converted to a link to an issue. But honestly, copying https://reqs.example.com/req-tracker/req/FOO-123 from the browser's address line into a issue ticket would hurt nobody.</p> <p>So, how do you track issues, requirements, tests? Do you know a software that might fit our needs?</p> <p>Alexander</p> <div class="pmsig"><div class="pmsig-747201"> --<br /> Today I will gladly share my knowledge and experience, for there are no sweeter words than "I told you so". ;-) </div></div></ul> </td> </tr> <!-- End Post --> <!-- 2 replies --> <!-- Begin Post --> <!-- embed node with vote container --> <tr class="post-head post_head"> <td valign="top" style="padding-left:.2em"> <!-- TITLE --> <a id ="post-head-id11164588" name="post-head-id11164588" href="?node_id=11164588" >Why won&#39;t my Dancer2 app render any output???</a> <br/> <!-- REPLIES --> 2 direct replies &mdash; <a href="?node_id=11164588">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=59514">traveler</a> <br/> <!-- DATE --> on Apr 05, 2025 at 15:19 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> <!-- anonymonk cant vote --> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul>I have been away from the monastery for a while, but I have a very perplexing issue. I am migrating a Dancer2 site from Apache 2.2 to Apache 2.4 (Apache2 under Ubuntu). It works under 2.2 on CentOS, but not on the Ubuntu with 2.4. I copied the whole Dancer2 directory to the new server. I do the output with template commands, if that matters. I read the Apache2 error log and put perl debugs before and after the template command. There are no errors between the debugs. Here is the meaningful part of the Apache conf file. I have verified that apache reads it. <pre class="code"><div class='codeblock'><tt class='codetext'>DocumentRoot /var/webapps/sandbox/public &lt;FilesMatch &quot;\.(?:cgi|shtml|phtml|php)$&quot;&gt; SSLOptions +StdEnvVars &lt;/FilesMatch&gt; &lt;Directory &quot;/var/webapps/sandbox/public&quot;&gt; Options +Indexes +FollowSymLinks +MultiViews +ExecCGI AddHandler cgi-script .cgi AllowOverride None Require all granted SSLOptions +StdEnvVars &lt;/Directory&gt; RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^(.*)$ /dispatch.cgi$1 &#91;QSA,L&#93; # ScriptAlias / /var/webapps/sandbox/public/dispatch.cgi/ &lt;Location /&gt; # Set up your Dancer2 application SetHandler cgi-script AddHandler application/x-httpd-perl .cgi PerlSetEnv Dancer2_APP /var/webapps/sandbox/bin/app.pl PerlSetEnv DANCER2_CONFDIR /var/webapps/sandbox PerlSetEnv DANCER_CONFDIR /var/webapps/sandbox PerlSetEnv DANCER2_ENV development &lt;/Location&gt; </tt></div><div class='embed-code-dl'><a href="?abspart=1;node_id=11164588;displaytype=displaycode;part=1">&#91;download&#93;</a></div></pre> Here is my Dancer2 config.yml <pre class="code"><div class='codeblock'><tt class='codetext'># Your application&#39;s name appname: &quot;sandbox&quot; # We want to keep session data around so engines: session: YAML: session_dir: /tmp/dancer-sessionstore engines: template: template_toolkit: start_tag: &#39;&lt;%&#39; end_tag: &#39;%&gt;&#39; template: &quot;template_toolkit&quot; session: YAML # The default layout to use for your application (located in # views/layouts/main.tt) layout: &quot;main&quot; # when the charset is set to UTF-8 Dancer2 will handle for you # all the magic of encoding and decoding. You should not care # about unicode within your app when this setting is set (recommended)<span class="line-breaker"> <font color="red">+</font></span>. charset: &quot;UTF-8&quot; # template engine # simple: default and very basic template engine # template_toolkit: TT # template: &quot;simple&quot; plugins: Database: driver: &#39;mysql&#39; database: &#39;vlabs&#39; host:&#39;something&#39; port: 3306 username: &#39;rouser&#39; password: &#39;xxxxxxxxxx&#39; connection_check_threshold: 10 </tt></div><div class='embed-code-dl'><a href="?abspart=1;node_id=11164588;displaytype=displaycode;part=2">&#91;download&#93;</a></div></pre> Here is a code snippet: <pre class="code"><div class='codeblock'><tt class='codetext'> debug &quot;displaying login page&quot;; template &#39;login.tt&#39;, { path =&gt; param(&#39;requested_path&#39;) }; debug &quot;showed login page&quot;; </tt></div><div class='embed-code-dl'><a href="?part=3;node_id=11164588;displaytype=displaycode;abspart=1">&#91;download&#93;</a></div></pre> And the log snippet: <pre class="code"><div class='codeblock'><tt class='codetext'>&#91;sandbox:12160&#93; debug @2025-04-05 15:07:00&gt; displaying login page in /<span class="line-breaker"> <font color="red">+</font></span>var/webapps/sandbox/public/../lib/sandbox.pm l. 45 &#91;sandbox:12160&#93; debug @2025-04-05 15:07:00&gt; showed login page in /var/<span class="line-breaker"> <font color="red">+</font></span>webapps/sandbox/public/../lib/sandbox.pm l. 47 </tt></div><div class='embed-code-dl'><a href="?abspart=1;displaytype=displaycode;node_id=11164588;part=4">&#91;download&#93;</a></div></pre> There is a main.tt and a login.tt in the correct places. I get <b>no</b> output in my browser. The page is empty even when I look at the page source. (I do see the favicon.ico.) I am stumped, monks. Any ideas? TIA </ul> </td> </tr> <!-- End Post --> <!-- 3 replies --> <!-- Begin Post --> <!-- embed node with vote container --> <tr class="post-head post_head"> <td valign="top" style="padding-left:.2em"> <!-- TITLE --> <a id ="post-head-id11164580" name="post-head-id11164580" href="?node_id=11164580" >Checking string emptiness</a> <br/> <!-- REPLIES --> 3 direct replies &mdash; <a href="?node_id=11164580">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=11164438">dave93</a> <br/> <!-- DATE --> on Apr 04, 2025 at 16:43 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> <!-- anonymonk cant vote --> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul><p>In my code I frequently have to write conditions like this:</p> <pre class="code"><div class='codeblock'><tt class='codetext'>if (defined $string and $string ne &quot;&quot;) { ..... } </tt></div><div class='embed-code-dl'><a href="?part=1;abspart=1;node_id=11164580;displaytype=displaycode">&#91;download&#93;</a></div></pre> <p>What I really want is to check if the string is not entirely empty. I would like to be able to do something like <tt class='inlinecode'>if ($string)</tt> but this would exclude "0".</p> <p>So I hope that there is a shorter and nicer way to do this. For now I have been using a utility <tt class='inlinecode'>strempty</tt> subroutine which runs that check but I doubt it's idiomatic.</p> <p>In my own code I try to have it so that empty strings are simply <tt class='inlinecode'>undef</tt>, where applicable, but sometimes it can't be helped and external modules don't follow this rule hence why I have to write these conditions.</p> </ul> </td> </tr> <!-- End Post --> <!-- 3 replies --> <!-- Begin Post --> <!-- embed node with vote container --> <tr class="post-head post_head"> <td valign="top" style="padding-left:.2em"> <!-- TITLE --> <a id ="post-head-id11164574" name="post-head-id11164574" href="?node_id=11164574" >How to test if a string is unicode string?</a> <br/> <!-- REPLIES --> 3 direct replies &mdash; <a href="?node_id=11164574">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=1166559">harangzsolt33</a> <br/> <!-- DATE --> on Apr 04, 2025 at 00:49 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> <!-- anonymonk cant vote --> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul>What's the best way to tell if a string is unicode or plain ASCII, or do I just use a regex like this?: <pre class="code"><div class='codeblock'><tt class='codetext'>if ($STRING =~ m/&#91;^\x00-\xFF&#93;{1}/) { ... } </tt></div><div class='embed-code-dl'><a href="?part=1;abspart=1;node_id=11164574;displaytype=displaycode">&#91;download&#93;</a></div></pre> <p>OR MAYBE: <pre class="code"><div class='codeblock'><tt class='codetext'>if (length($STRING) &gt; ($STRING =~ tr|\x00-\xFF|\x00-\xFF|)) { ... } </tt></div><div class='embed-code-dl'><a href="?displaytype=displaycode;node_id=11164574;abspart=1;part=2">&#91;download&#93;</a></div></pre> <p>I can't think of anything better. Maybe this, but I bet it's slow: <pre class="code"><div class='codeblock'><tt class='codetext'>sub isUnicode { my $L = defined $_&#91;0&#93; ? length($_&#91;0&#93;) : 0; for (my $i = 0; $i &lt; $L; $i++) { ord(substr($_&#91;0&#93;, $i, 1)) &lt; 256 or return 1; } return 0; } </tt></div><div class='embed-code-dl'><a href="?node_id=11164574;displaytype=displaycode;abspart=1;part=3">&#91;download&#93;</a></div></pre> </ul> </td> </tr> <!-- End Post --> <!-- 1 reply --> <!-- Begin Post --> <!-- embed node with vote container --> <tr class="post-head post_head"> <td valign="top" style="padding-left:.2em"> <!-- TITLE --> <a id ="post-head-id11164559" name="post-head-id11164559" href="?node_id=11164559" >regex capture groups when using DEFINE predicate</a> <br/> <!-- REPLIES --> 1 direct reply &mdash; <a href="?node_id=11164559">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=11162432">unmatched</a> <br/> <!-- DATE --> on Apr 03, 2025 at 06:23 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> <!-- anonymonk cant vote --> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul><p>Hello Monks,</p> <p>I've recently learned about the <a href="https://perldoc.perl.org/perlre#(DEFINE)">DEFINE predicate</a> and I'm testing it with a simple script that I wrote to practice Perl and regular expressions. The script simply checks for IPv4 or IPv6 addresses (I know there is a CPAN module for that, this is for me to practice), and I re-wrote the regular expression like so:</p> <pre class="code"><div class='codeblock'><tt class='codetext'>my $re = qr{ (?&gt; \b ((?&amp;IPV6) | (?&amp;IPV4)) \b ) (?(DEFINE) (?&lt;IPV6&gt; ( ((?&amp;H16) :){6} (?&amp;LS32)) | ( :: ((?&amp;H16) :){5} (?&amp;LS32)) | (( (?&amp;H16))? :: ((?&amp;H16) :){4} (?&amp;LS32)) | ((((?&amp;H16) :){0,1} (?&amp;H16))? :: ((?&amp;H16) :){3} (?&amp;LS32)) | ((((?&amp;H16) :){0,2} (?&amp;H16))? :: ((?&amp;H16) :){2} (?&amp;LS32)) | ((((?&amp;H16) :){0,3} (?&amp;H16))? :: ((?&amp;H16) :){1} (?&amp;LS32)) | ((((?&amp;H16) :){0,4} (?&amp;H16))? :: (?&amp;LS32)) | ((((?&amp;H16) :){0,5} (?&amp;H16))? :: (?&amp;H16) ) | ((((?&amp;H16) :){0,6} (?&amp;H16))? :: ) ) (?&lt;LS32&gt; ((?&amp;H16) : (?&amp;H16)) | (?&amp;IPV4) ) (?&lt;H16&gt; (?&amp;HEX_DIGIT){1,4} ) (?&lt;HEX_DIGIT&gt; &#91;a-fA-F0-9&#93; ) (?&lt;IPV4&gt; ((?&amp;DEC_OCTET)\.){3}(?&amp;DEC_OCTET) ) (?&lt;DEC_OCTET&gt; 25&#91;0-5&#93;|2&#91;0-4&#93;\d|1\d\d|\d\d|\d ) (?&lt;IP_VFUTURE&gt; v(?&amp;HEX_DIGIT)+\.((?&amp;UNRESERVED) | (?&amp;SUB_DELIMS) | : )+ ) (?&lt;UNRESERVED&gt;&#91;a-zA-Z0-9\-\._~&#93; ) (?&lt;SUB_DELIMS&gt;&#91;!\$&amp;&#39;\(\)\*\+,;=&#93; ) ) }x; </tt></div><div class='embed-code-dl'><a href="?part=1;abspart=1;displaytype=displaycode;node_id=11164559">&#91;download&#93;</a></div></pre> <p>It works, but it only seems to capture the first occurrence of an IP address on each line. For example:</p> <pre class="code"><div class='codeblock'><tt class='codetext'>if (&quot;This is the same address in IPv6: 0:0:0:0:0:0:0:1 and 127.0.0.1&quot; <span class="line-breaker"> <font color="red">+</font></span>=~ /$re/g ) { say $&amp;; say $1; say $2; } </tt></div><div class='embed-code-dl'><a href="?part=2;displaytype=displaycode;node_id=11164559;abspart=1">&#91;download&#93;</a></div></pre> <p>I was expecting to capture both IP addresses, but only the first is ever captured. Can anyone shed some light on how could I make this work in this way?</p> <p>Thank you!</p></ul> </td> </tr> <!-- End Post --> </table> </td> </tr> </table> <table width="100%" cellpadding="0" cellspacing="0"> <tr class="section_title" width="100%" border="1"> <td class="section_title" width="100%"> Meditations </td> </tr> <tr> <td> <table width="100%" border="0" cellpadding="2" cellspacing="0"> <!-- 2 replies --> <!-- Begin Post --> <!-- embed node with vote container --> <tr class="post-head post_head"> <td valign="top" style="padding-left:.2em"> <!-- TITLE --> <a id ="post-head-id11164573" name="post-head-id11164573" href="?node_id=11164573" >RFC: a meditation on Module::List and Module::List::WithPath</a> <br/> <!-- REPLIES --> 2 direct replies &mdash; <a href="?node_id=11164573">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=19724">Intrepid</a> <br/> <!-- DATE --> on Apr 03, 2025 at 19:57 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> <!-- anonymonk cant vote --> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul><p>Hello erudite Monks and Nuns,</p> <p>I found a <span class="caps">CPAN </span>module recently that really makes me happy. As a habitual serial installer of anything from the <span class="caps">CPAN </span>that looks interesting, I sometimes forget what I have installed before I can start to write some code using it. Enter <a href="https://metacpan.org/pod/Module%3A%3AList">Module::List</a>; which showed up as "recent" on MetaCPAN with the release of version 0.004. There is also a close relative, let&#39;s call it a talented nephew, <a href="https://metacpan.org/pod/Module%3A%3AList%3A%3AWithPath">Module::List::WithPath</a>, which is based on Module::List and adds the ability to discover the filesystem path location of each module found. At the time of this writing, module Module::List::WithPath is at version 0.003002.</p> <p>But we&#39;re ahead of ourselves. What Module::List does is a lookup on the prefix given as an argument to the sole subroutine in the module, <strong>list_modules</strong>, returning differing information depending on the options given (as an anonymous hash) -- for example, all the installed module names with that prefix (I won&#39;t describe every bit of the functionality or <span class="caps">API </span>since that&#39;s all right there on MetaCPAN for the reader to peruse). I&#39;ll make the observation that the <span class="caps">API </span>is a bit unusual: instead of providing a separate subroutine (either exported or not) for each kind of data sought, the module provides options (as just described above). The most interesting option (imho) is the first listed in the <span class="caps">POD, </span>list_modules. The return data is a hash reference with keys corresponding to module names found in the abstract namespace (regardless of where the modules were found on the filesystem). The values of the hash elements are in each case the empty string. In the case of the talented nephew, Module::List::WithPath, the element <strong>values</strong> are, instead, the filesystem locations of the modules found. Very nifty.</p> <p>I just find these modules really neat and they fill a gap that I&#39;ve been feeling for a long time. Quirks (arguably) of implementation aside, the modules have enabled me to write simple short scripts to query my Perl installation and discover what has lain there, waiting but forgotten.</p> Apr 03, 2025 at 23:54&nbsp;UTC <div class="pmsig"><div class="pmsig-19724"> <p><small>A just machine to make big decisions<br /> Programmed by fellows (and gals) with compassion and vision<br /> We&#39;ll be clean when their work is done<br /> We&#39;ll be eternally free yes, and eternally young<br /> <strong>Donald Fagen &mdash;&gt; <span class="caps">I.G.Y.</span></strong><br /> <strong>(Slightly modified for inclusiveness)</strong></small></p> </div></div></ul> </td> </tr> <!-- End Post --> </table> </td> </tr> </table> <!-- END general container --> <!--/contained stuff--> </td> <!--nodelet handling code (monktainer)--> <td width="20%" valign="top" align="right" class="nodelets"> <!-- Begin nodelets --> <table class='nodelet_container' id='nodelet_container'> <!-- Nodelet Break --> <tbody class="nodelet" id="Log_In"> <tr><th class="nodelet_head"> <span class="title">Log In</span><a href="?node=About The Log In Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <form method="post" action="?" enctype="multipart/form-data" name="login"> <span><input type="hidden" name="node_id" value="109" ></input></span> <input type="hidden" name="op" value="login" /> <input type="hidden" name="lastnode_id" value="131" /> <table border="0"><tr><td> Username:</td><td> <input type="text" name="user" size="10" maxlength="34" /> </td></tr><tr><td> Password:</td><td> <input type="password" name="passwd" size="10" maxlength="10" /> </td></tr></table> <label><input type="checkbox" name="expires" value="+10y" />remember me</label> <input type="submit" name="login" value="Login" /> <br /> <a href="?node_id=2513">What's my password?</a> <br /> <a href="?node_id=101">Create A New User</a> </form> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Domain_Nodelet"> <tr><th class="nodelet_head"> <span class="title">Domain Nodelet</span><a href="?node=About The Domain Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <p class='domain_link' align='center'><a class='wwwdomainlink' href="http://www.perlmonks.com/index.pl?node_id=131">www</a>.<a class='domainlink' href="http://perlmonks.com/index.pl?node_id=131">com</a> | <a class='wwwdomainlink' href="http://www.perlmonks.net/index.pl?node_id=131">www</a>.<a class='domainlink' href="http://perlmonks.net/index.pl?node_id=131">net</a> | <a class='wwwdomainlink' href="http://www.perlmonks.org/index.pl?node_id=131">www</a>.<span class='currentdomain'>org</span></p> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Chatterbox"> <tr><th class="nodelet_head"> <span class="title">Chatterbox</span><a href="?node=About The Chatterbox Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <form method="get" action="?" enctype="multipart/form-data"> <span><input type="hidden" name="node_id" value="131" ></input></span><i>and the web crawler heard nothing...</i> <input type="submit" name="foo" value="Refresh" /> </form> <i><br /> <a href="?node=ChatterBox%20FAQ">How do I use this?</a> &bull; <a href="?node=last%20hour%20of%20cb">Last hour</a> &bull; <a href="?node_id=20842">Other CB clients</a></i> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Other_Users"> <tr><th class="nodelet_head"> <span class="title">Other Users</span><a href="?node=About The Other Users Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <span class="other-users-text">Others <span class="other-users-blurb">taking refuge in</span> the Monastery:</span> (4)<br /><ul class="spacey-list"><li><span class='even-row'><span class='item-000'><span class='user-level-24'><span class='user-832495'><a title="choroba's home node. Level 24. Member of: pmdev" href="?node_id=832495">choroba</a></span></span></span></span></li> <li><span class='odd-row'><span class='item-001'><span class='user-level-20'><span class='user-200365'><a title="Tux's home node. Level 20" href="?node_id=200365">Tux</a></span></span></span></span></li> <li><span class='even-row'><span class='item-002'><span class='user-level-20'><span class='user-174111'><a href="?node_id=174111" title="Discipulus's home node. Level 20. Member of: janitors">Discipulus</a></span></span></span></span></li> <li><span class='odd-row'><span class='item-003'><span class='user-level-1'><span class='user-11155664'><a href="?node_id=11155664" title="chatterbot's home node. Level 1">chatterbot</a></span></span></span></span></li> </ul><span class='update-time'><small>As of 2025-04-09 08:54 GMT</small></span> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Sections"> <tr><th class="nodelet_head"> <span class="title">Sections</span><a href="?node=About The Sections Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <ul class="spacey-list"> <li><a href="?node=Seekers%20of%20Perl%20Wisdom">Seekers of Perl Wisdom</a></li> <li><a href="?node=Cool%20Uses%20for%20Perl">Cool Uses for Perl</a></li> <li><a href="?node=Meditations">Meditations</a></li> <li><a href="?node=Perl%20Monks%20Discussion">PerlMonks Discussion</a></li> <li><a href="?node=Categorized%20Questions%20and%20Answers">Categorized Q&amp;A</a></li> <li><a href="?node=Tutorials">Tutorials</a></li> <li><a href="?node=Obfuscated%20Code">Obfuscated Code</a></li> <li><a href="?node=Perl%20Poetry">Perl Poetry</a></li> <li><a href="?node=Perl%20News">Perl News</a></li> <li><a href="?node_id=483086">about</a></li> </ul> <!-- args=(Sections) NODE.title = The Monastery Gates NODE.owner = 485628 N.title = Sections sitedoclet N.owner = 17342 --> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Information"> <tr><th class="nodelet_head"> <span class="title">Information</span><a href="?node=About The Information Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <ul class="spacey-list"> <li><a href="?node=PerlMonks%20FAQ">PerlMonks FAQ</a></li> <li><a href="?node=the%20Perl%20Monks%20guide%20to%20the%20Monastery">Guide to the Monastery</a></li> <li><a href="?node=Tidings">What's New at PerlMonks</a></li> <li><a href="?node=Voting%2FExperience%20System">Voting/Experience System</a></li> <li><a href="?node=Tutorials">Tutorials</a></li> <li><a href="?node=Reviews">Reviews</a></li> <li><a href="?node=Library">Library</a></li> <li><a href="?node=perlman%3Aperlfaq">Perl FAQs</a></li> <li><a href="?node=Where%20can%20I%20find%20more%20information%20on...">Other Info Sources</a></li> </ul> <!-- args=(Information sitedoclet -TIDINGS_NEW ) NODE.title = The Monastery Gates NODE.owner = 485628 N.title = Information sitedoclet N.owner = 17342 --> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Find_Nodes"> <tr><th class="nodelet_head"> <span class="title">Find Nodes</span><a href="?node=About The Find Nodes Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <ul class="spacey-list"> <li><a href="?node_id=6364;user=961">Nodes You Wrote</a></li> <li><a href="?node=My%20Watched%20Nodes">My Watched Nodes</a></li> <li><a href="?node=Super%20Search">Super Search</a></li> <li><a href="?node=Perl%20Monks%20User%20Search">List Nodes By Users</a></li> <li><a href="?node=Newest%20Nodes">Newest Nodes</a></li> <li><a href="?node=Recently%20Active%20Threads">Recently Active Threads</a></li> <li><a href="?node=Selected%20Best%20Nodes">Selected Best Nodes</a></li> <li><a href="?node=Best%20Nodes">Best Nodes</a></li> <li><a href="?node=Worst%20Nodes">Worst Nodes</a></li> <li><a href="?node=Saints%20in%20our%20Book">Saints in our Book</a></li> <li><a href="?op=randomnode">Random Node</a></li> </ul> <!-- args=(Find Nodes sitedoclet -USER 961) NODE.title = The Monastery Gates NODE.owner = 485628 N.title = Find Nodes sitedoclet N.owner = 17342 --> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Leftovers"> <tr><th class="nodelet_head"> <span class="title">Leftovers</span><a href="?node=About The Leftovers Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <ul class="spacey-list" id="user"></ul> <ul class="spacey-list" id="internal"> <li><a href="?node=The%20St.%20Larry%20Wall%20Shrine">The St. Larry Wall Shrine</a></li> <li><a href="?node=Offering%20Plate">Offering Plate</a></li> <li><a href="?node=Awards">Awards</a></li> <li><a href="?node=Quests">Quests</a></li> </ul> <ul class="spacey-list" id="external"> <li><a href="http://www.perl.org/">Perl</a></li> <li><a href="http://blogs.perl.org/">Perl Blogs</a></li> <li><a href="http://perl.com/">Perl.com</a></li> <li><a href="https://perl.theplanetarium.org/">Planet Perl</a></li> <li><a href="http://perlweekly.com/">Perl Weekly</a></li> <li><a href="http://jobs.perl.org/">Perl Jobs</a></li> <li><a href="http://www.pm.org/">Perl Mongers</a></li> <li><a href="http://perldoc.perl.org/">Perl documentation</a></li> <li><a href="https://metacpan.org/">MetaCPAN</a></li> <li><a href="http://cpan.perl.org/">CPAN</a></li> <li><a href="https://raku.org/">Raku</a></li> </ul> <!-- args=(Leftovers sitedoclet -USER_LINKS -TIL <span class="wikilink"><a href="?node_id=11156813">Today I Learned</a></span>) NODE.title = The Monastery Gates NODE.owner = 485628 N.title = Leftovers sitedoclet N.owner = 17342 --> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Voting_Booth"> <tr><th class="nodelet_head"> <span class="title">Voting Booth</span><a href="?node=About The Voting Booth Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <p>No recent polls found<br /> </td></tr> </tbody> <!-- Nodelet Break --> <tbody class="nodelet" id="Notices"> <tr><th class="nodelet_head"> <span class="title">Notices</span><a href="?node=About The Notices Nodelet" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <table> <tr><th></th><td>&bull; <i><a class="hoverDate" href="?node_id=1131330" title="2025-03-24 08:23:38">erzuuli</a></i></td><!-- <td>[id://651530]</td> --><td>&nldr; <a href="?node=Anonymous%20Monk">Anonymous Monk</a>s are no longer allowed to use Super Search, due to an excessive use of this resource by robots.</td></tr> </table> </td></tr> </tbody> </table> <!-- End nodelets --> </td> <!--/nodelet handling code (monktainer)--> </tr> </table> </center> <!-- End main (monktainer)--> <br /> <br /> <div id="footer"> PerlMonks graciously bestowed by <a href="?node=vroom">Tim Vroom</a>.<br/> PerlMonks was recently assimilated by <a href="http://www.perlfoundation.org">The Perl Foundation</a>. <a href="?node=Offering%20Plate">Donate</a> to TPF!<br /> Marvelous Managed Hosting and Bandwidth Generously Provided by <a href="http://promote.pair.com/direct.pl?perlmonks.org"> pair Networks</a> <br/>Built with the <a href="http://perl.org">Perl programming language</a>. </div> <!-- /monktainer --> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10