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%" > The stupid question is the question not asked </td> </tr> <tr class="titlebar"> <td class="titlebar"> <form method="get" action="?" enctype="application/x-www-form-urlencoded" > <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> </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 in</a></li><li><a href="?node_id=101">Create a new user</a></li> <li><a href="?">The Monastery Gates</a></li> <li><a href="?node=Seekers%20of%20Perl%20Wisdom">Seekers of Perl Wisdom</a></li> <li><a href="?node=Meditations">Meditations</a></li> <li><a href="?node=Cool%20Uses%20for%20Perl">Cool Uses For 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 News</a></li> <li><a href="?node=Recently%20Active%20Threads">Recent Threads</a></li> <li><a href="?node=Newest%20Nodes">Newest Nodes</a></li> <li><a href="?node=Super%20Search">Super Search</a></li> <li><a href="?node=Perl%20Monks%20Discussion">PerlMonks Discussion</a></li> <li><a href="?node=Tidings">What's New</a></li> </ul> <!-- args=(monktitlebar sitedoclet -TOPNAV_SPECIAL <li><a href="?node_id=109">Log in</a></li><li><a href="?node_id=101">Create a new 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">[id://131]</a>=<a href="?node_id=14">superdoc</a>: <a rel="nofollow" href="?node_id=131;displaytype=print">print</a> <a rel="nofollow" href="?replies=1;displaytype=print;node_id=131">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> ⇒ <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> </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=11157911">Wall of Larry Quest</a><br /> Starts at: Feb 26, 2024 at 05:00<br /> Ends at: Dec 31, 2024 at 04:59<br /> Current Status: Active </td> <td valign="top"> <a href="?node_id=11157911">2 replies</a> </td> <td valign="top"> by <a href="?node_id=170442">jdporter</a> </td> </tr> <tr><td> <ul><p> By now you've all seen <b><a href="?node_id=153">The St. Larry Wall Shrine</a></b>. Well, it could use a fresh coat of gold leaf and shellac. Therefore, we are soliciting Larry-related items to be placed on the shrine. Links to offsite content are good; or if you have small bits of content, such as quotes, you'd like to contribute, that's fine too. Please reply to this Quest with your humble offerings. Thank you! And may St. Larry <a href="http://perldoc.perl.org/functions/bless.html">bless</a> your codings and your debuggings. </p></ul> </td></tr> <tr width="100%" class="highlight"><td> <a href="?node_id=11156525">poll ideas quest 2024</a><br /> Starts at: Jan 01, 2024 at 00:00<br /> Ends at: Dec 31, 2024 at 23:59<br /> Current Status: Active </td> <td valign="top"> <a href="?node_id=11156525">6 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=11162948">German Perl/Raku Workshop 2025 in Munich - 12.05.2025-14.05.2025</a> <BR> on Nov 29, 2024 at 01:45 </TD> <TD valign=top> <a href="?node_id=11162948">0 replies</a> </TD> <TD valign=top> by <a href="?node_id=5348">Corion</a> </TD> </TR> <TR><TD> <ul><p>Hello everybody,</p> <p> we cordially invite you to the <a href="https://act.yapc.eu/gpw2025/">German Perl/Raku Workshop 2025</a>. </p> <p> The workshop will take place next year from Monday 12 May to Wednesday 14 May at the <a href="https://www.tagungen-muenchen.de/de/">Kolpinghaus in Munich.</a>. </p><p> The website and the call for papers are already <a href="https://act.yapc.eu/gpw2025/cfp.html">online</a>. We are looking forward to many interesting presentations! </p><p> We are always happy to receive support from sponsors. If you or your company would like to support the workshop, please contact us. We will find a way together! </p><p> If you have any questions for the organisers, please contact us directly at <a href="mailto:orga2025@german-perl-workshop.de">orga2025@german-perl-workshop.de</a> . </p><p> We are still working on hotel recommendations and will publish them on the website. </p><p> We look forward to your participation,</p> <p><a href="?node=Corion">Corion</a> for the organizers</p></ul> </TD></TR> <!-- END embed node container --> <!-- BEGIN embed node container --> <TR class="highlight"><TD><a href="?node_id=11162792">Toronto Perl Mongers present Dave Cross: Still Data Munging with Perl</a> <BR> on Nov 18, 2024 at 12:25 </TD> <TD valign=top> <a href="?node_id=11162792">0 replies</a> </TD> <TD valign=top> by <a href="?node_id=131279">talexb</a> </TD> </TR> <TR><TD> <ul><p>Well-known Perl author Dave Cross will be giving a talk titled Still Data Munging with Perl at 4pm Toronto time (8pm London time), on March 27, 2025. The lu.ma event page is <a href="https://lu.ma/3b8ekn8y">here</a>; please register!</p> <p>Like the <a href="https://lu.ma/giz69577">Randall Schwartz event</a>, this will be a virtual event. A link will be posted to the page once we have that organized.</p> <p>PS There are currently 134 people signed up for Randall's talk. I figured we'd be doing well if we got 25 people. The Perl community is so cool.</p> <div class="pmsig"><div class="pmsig-131279"> <p>Alex / <a href="?node=talexb">talexb</a> / Toronto</p> <p><small>Thanks PJ. We owe you so much. <a href="http://www.groklaw.net">Groklaw</a> -- RIP -- 2003 to 2013.</small></p> </div></div></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-id11162873" name="post-head-id11162873" href="?node_id=11162873" >Why is using binmode on a file handle 77 times slower than just closing it and re-opening?</a> <br/> <!-- REPLIES --> 1 direct reply — <a href="?node_id=11162873">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=11152249">Maelstrom</a> <br/> <!-- DATE --> on Nov 24, 2024 at 23:46 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul>One of the more questionable things my file reading modules does is keep a list of opened file handles in a global hash allowing me to perform multiple operations on a filehandle by name. I was benchmarking the write times for syswrite vs PerlIO and I found something very strange, while keeping the file handle open normally results in being an order of magnitude faster on the test where a <tt class='inlinecode'>binmode($fh,':encoding(UTF-8))</tt> is used the rate drops from several thousand to 30 runs a second. It doesn't happen on read operations and it doesn't happen with just <tt class='inlinecode'>binmode($fh)</tt> (sans encoding). It's not a huge deal, just validates my decision to make not using PerlIO the default but still, 7700% is a lot of difference for what I would've assumed is the same basic operation. SSSCE and benchmark as follows... <pre class="code"><div class='codeblock'><tt class='codetext'>use Benchmark qw/cmpthese timethese/; my (@array,%handle); my $file = 'testout.txt'; for (1 .. 1000) { push @array, 'It was the best of times, it was the w<span class="line-breaker"> <font color="red">+</font></span>orst of times...' . $/; } cmpthese(-8, { close => sub { &printfile(@array); }, noclose => sub { &printfile(@array,{noclose=>1}); }, }); sub printfile { my $opts = ( ref $_[-1] eq 'HASH' ) ? pop : {}; my $fh; my $string = join '', @_; if ($handle{$file}) { $fh = $handle{$file}; binmode $fh, ':encoding(UT<span class="line-breaker"> <font color="red">+</font></span>F-8)'; } else { open($fh, "> :encoding(UTF-8)", $file) || die "Can't open $file fo<span class="line-breaker"> <font color="red">+</font></span>r writing: $!"; $handle{$file} = $fh unless (! $opts->{'noclose'}); } seek($fh, 0, 0); print $fh $string; close $fh unless ($opts->{'noclose'}); } </tt></div><div class='embed-code-dl'><a href="?part=3;displaytype=displaycode;node_id=11162873;abspart=1">[download]</a></div></pre> Benchmark Results <pre> Rate noclose close noclose 29.9/s -- -99% close 2330/s 7705% -- </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-id11162858" name="post-head-id11162858" href="?node_id=11162858" >DBI.c has a problem</a> <br/> <!-- REPLIES --> 1 direct reply — <a href="?node_id=11162858">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=11162856">K0ttn</a> <br/> <!-- DATE --> on Nov 24, 2024 at 10:51 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul><tt class='inlinecode'>DBI.c: loadable library and perl binaries are mismatched (got first handshake key 0xeb00080, needed 0xf380080)</tt> <p> This is only when run by a normal user. Root doesn't have the problem. I used cpan to reinstall. Didn't help. This is a fresh install of Mint 22. There is only one installation of Perl on this system. </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"> <!-- 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-id11162937" name="post-head-id11162937" href="?node_id=11162937" >Perl's hidden depths</a> <br/> <!-- REPLIES --> 1 direct reply — <a href="?node_id=11162937">Read more / Contribute</a> </td> <td valign="top" align="right" style="padding-right:.2em"> <!-- AUTHOR --> by <a href="?node_id=131279">talexb</a> <br/> <!-- DATE --> on Nov 28, 2024 at 11:56 </td> </tr> <tr class="post-voterep"> <td colspan="2" class="voterep"> </td> </tr> <tr class="post-body post_body"> <td colspan="2"> <ul><p>I'm semi-retired, which means I take care of a client's system of Perl scripts that mostly run without my intervention. I log everything with the excellent <a href="http://search.cpan.org/search?mode=module&query=Log%3A%3ALog4perl">Log::Log4perl</a> module, and sometimes I tail those files to keep on eye on the various scripts that run. One group of scripts creates tickets for new orders, and other scripts update these tickets based on what Sage (the accounting system) says.</p> <p>Eventually, I started to think about understanding the life-cycle of these tickets -- they get created (that's logged in one file), they get updated (logged in a couple of other files), and they get closed (logged in two other files). Could I parse all of the log files and see the life-cycle just by drawing inferences? It's an academic exercise, since all I have to do is query the ticketing system's API about the history of a ticket, but like I said, I'm mostly retired, but I'm still curious.</p> <p>The lines are like this: <pre class="code"><div class='codeblock'><tt class='codetext'>2024/11/28 10:54:04 INFO : Update ticket 425955 to add invoice 802436 <span class="line-breaker"> <font color="red">+</font></span>tag .. OK 2024/11/28 10:54:05 INFO : Update ticket 425912 to add invoice 802435 <span class="line-breaker"> <font color="red">+</font></span>tag .. OK 2024/11/28 10:54:06 INFO : Add note to ticket 425912 with info about i<span class="line-breaker"> <font color="red">+</font></span>nvoice 802435 .. OK 2024/11/28 10:57:02 INFO : Create FD ticket 425991 for order 662626 ..<span class="line-breaker"> <font color="red">+</font></span> OK </tt></div><div class='embed-code-dl'><a href="?displaytype=displaycode;part=1;abspart=1;node_id=11162937">[download]</a></div></pre> So I created an AoH data structure with the filename, a useful regular expression, and an action (create or update). (Because for me, it always starts with a data structure to organize the logic.) But then I realized each log file had different elements that needed collecting. How do I handle that without having to write code for each log file? Can't I just add something clever to my data structure?</p> <p>Eventually, some of my brain cells told me I needed to use a named capture in the regular expressions to handle this. Other brain cells complained that I'd never used that before, but the first group of brain cells said, Nonsense (or Buck Up, I forget), it's all in the Camel if you just look.</p> <p>So, when you're capturing stuff in a regexp with a clause like <tt class='inlinecode'>(\d+)</tt>, that first capture just gets stashed in <tt class='inlinecode'>$1</tt>. But you can also name that capture (a feature I never needed until now), like this: <tt class='inlinecode'>(?<ticket>\d+)</tt>. And you get it out by looking at the magic variable <tt class='inlinecode'>%+</tt>, so the ticket value is available as <tt class='inlinecode'>$+{ ticket }</tt>. SO COOL!</p> <p>I was then able to write a bunch of regular expressions, all with named captures, and collect whatever I needed from the log lines. Then, if a particular element was there, I would add it to the history hash I was building. So one of the AoH entries looked like this: <pre class="code"><div class='codeblock'><tt class='codetext'>{ filename => 'status.log', regexp => qr/Update (?<ticket>\d+) status to (?<status>.+) \.\./, action => 'update' }, </tt></div><div class='embed-code-dl'><a href="?part=7;displaytype=displaycode;node_id=11162937;abspart=1">[download]</a></div></pre> Then, putting stuff into the history hash was this large statement: <pre class="code"><div class='codeblock'><tt class='codetext'>$history{ $+{ ticket } }{ $entry->{ action } } = { date => $words[0], 'time' => $words[1], ( exists ( $+{ order } ) ? ( order => $+{ order } ) : () ), ( exists ( $+{ invoice } ) ? ( invoice => $+{ invoice } ) : () ), ( exists ( $+{ shipment } ) ? ( shipment => $+{ shipment } ) : () ), ( exists ( $+{ scheduled_date } ) ? ( scheduled_date => $+{ scheduled_date } ) :<span class="line-breaker"> <font color="red">+</font></span> () ), ( exists ( $+{ status } ) ? ( status => $+{ status } ) : () ), }; </tt></div><div class='embed-code-dl'><a href="?part=8;displaytype=displaycode;node_id=11162937;abspart=1">[download]</a></div></pre> I wanted to do all of this in a single statement, rather than have individual if statements for each possible element.</p> <p>The code runs fine, and does what I expect. Named captures are a very cool feature, but they do exactly what I needed to do. Props to all the smart folks who came up with that idea (and then implemented it). What a cool language.</p> <div class="pmsig"><div class="pmsig-131279"> <p>Alex / <a href="?node=talexb">talexb</a> / Toronto</p> <p><small>Thanks PJ. We owe you so much. <a href="http://www.groklaw.net">Groklaw</a> -- RIP -- 2003 to 2013.</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" 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" 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> • <a href="?node=last%20hour%20of%20cb">Last hour</a> • <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" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <span class="other-users-text">Others <span class="other-users-blurb">chanting in</span> the Monastery:</span> (4)<br /><ul class="spacey-list"><li><span class='even-row'><span class='item-000'><span class='user-level-26'><span class='user-461912'><a href="?node_id=461912" title="GrandFather's home node. Level 26. Member of: janitors">GrandFather</a></span></span></span></span></li> <li><span class='odd-row'><span class='item-001'><span class='user-level-24'><span class='user-832495'><a href="?node_id=832495" title="choroba's home node. Level 24. Member of: pmdev">choroba</a></span></span></span></span></li> <li><span class='even-row'><span class='item-002'><span class='user-level-20'><span class='user-200365'><a href="?node_id=200365" title="Tux's home node. Level 20">Tux</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 2024-11-30 20:16 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" 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&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" 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" 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" 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" class="nodelethead-annot"><sup>?</sup></a> </th></tr> <tr><td class="nodelet_body"> <div class="poll-vote-form"><b>chatterbot is...</b><form method="post" action="?" enctype="multipart/form-data"> <span><input type="hidden" name="displaytype" value="display" ></input></span><span><input type="hidden" name="node_id" value="11162559" ></input></span><p><label><input type="radio" name="vote" value="0" />Great! It updates <a href="?node_id=596792">last hour of cb</a> and helps me join a discussion </label><br /><label><input type="radio" name="vote" value="1" />The! Worst! Thing! Ever! It always ignores my self-upvotes for <a href="?node_id=11155739">cb stats</a>!!?! </label><br /><label><input type="radio" name="vote" value="2" />Somewhat useful in settling debates with coin flips and dice rolls </label><br /><label><input type="radio" name="vote" value="3" /><a href="?node=Chatterbot">Chatterbot</a>? Nobody told me about it! </label><br /><label><input type="radio" name="vote" value="4" />Not my cup of tea. I do not do that live chat thingie...</label><br /><input type="submit" value="Vote" /></p></form><p><a href="?node_id=11162559">Results (56 votes)</a>. Check out <a href="?node=past%20polls">past polls</a>.</p></div> </td></tr> </tbody> </table> <!-- End nodelets --> </td> <!--/nodelet handling code (monktainer)--> </tr> </table> </center> <!-- End main (monktainer)--> <br /> <br /> <div id="footer"> PerlMonks parthenogenetically spawned by <a href="?node=vroom">Tim Vroom</a>.<br/> PerlMonks is a proud member of the <a href="http://www.perlfoundation.org">The Perl Foundation</a>. <a href="?node=Offering%20Plate">Donate</a> to TPF!<br /> Speedy Servers 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>