<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Obsolete Your Idols &#187; perl</title>
	<atom:link href="http://blog.manjusri.org/tag/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.manjusri.org</link>
	<description>Book Reviews and Blather</description>
	<lastBuildDate>Wed, 06 Jul 2011 18:46:43 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>The Bot Who Came In Out of the Cold</title>
		<link>http://blog.manjusri.org/2009/04/19/the-bot-who-came-in-out-of-the-cold/</link>
		<comments>http://blog.manjusri.org/2009/04/19/the-bot-who-came-in-out-of-the-cold/#comments</comments>
		<pubDate>Sun, 19 Apr 2009 18:22:00 +0000</pubDate>
		<dc:creator>binder</dc:creator>
				<category><![CDATA[Nerdery]]></category>
		<category><![CDATA[chatbot]]></category>
		<category><![CDATA[muck]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.manjusri.org/?p=172</guid>
		<description><![CDATA[I&#8217;ve now sunk a number of hours into it and added some functionality, none of which really works yet. But in the interest of keeping things going, here&#8217;s where things stand now. Explore doesn&#8217;t quite work, and there are still weird undef matches in the dialogue. But I pulled out all of Expect.pm and went [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;ve now sunk a number of hours into it and added some functionality, none of which really works yet.  But in the interest of keeping things going, here&#8217;s where things stand now.  Explore doesn&#8217;t quite work, and there are still weird undef matches in the dialogue.  But I pulled out all of Expect.pm and went to Smart::Comments.</p>
<p><pre><code><br />
#!/usr/bin/perl<br />
<br />
# mudbot by Shannon Prickett &lt;stp@manjusri.org&gt;<br />
# connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus.<br />
<br />
package mudbot;<br />
<br />
use Smart::Comments;<br />
use Modern::Perl;<br />
use Net::Telnet;<br />
use Net::AIML;<br />
use DB_File;<br />
<br />
use vars qw{$being_quiet %global_exit $mud_connection $mud_conversation $mud_host $mud_name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_pass $mud_port $mud_sent $pid $robot %room_name };<br />
use subs qw{setup};<br />
<br />
$mud_host&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#039;ginka.armageddon.org&#039;;<br />
$mud_port&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#039;4242&#039;;<br />
$mud_name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#039;Somebot&#039;;<br />
$mud_pass&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = &#039;YRMEME&#039;;<br />
$being_quiet&nbsp;&nbsp;&nbsp;&nbsp;= 0;<br />
$pid&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= $$;<br />
<br />
tie %room_name, &#039;DB_File&#039;, &#039;mapfile&#039; or<br />
&nbsp;&nbsp;&nbsp;&nbsp;die &quot;can&#039;t tie to mapfile: $!\n&quot;;<br />
<br />
$robot&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= Net::AIML-&gt;new( botid =&gt; &#039;GETFROMPANDORABOTS&#039; ); <br />
<br />
$mud_connection = new Net::Telnet( Host =&gt; $mud_host, Port =&gt; $mud_port )<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;or die &quot;Can&#039;t connect to $mud_host $mud_port: $!&quot;;<br />
<br />
setup( $mud_connection );<br />
<br />
TALKLOOP: while (1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;### TALKLOOP start<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $atme = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $prematch = &#039;&#039;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $postmatch = &#039;&#039;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $who_said;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;my ($stub_said, $what_said) = <br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;waitfor(&nbsp;&nbsp; Match =&gt; &#039;/ says, &quot;.*&quot;/&#039;,<br />
&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;Errmode =&gt; &#039;return&#039;, );<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;next TALKLOOP unless defined $what_said;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$stub_said =~ qr{ START \d+ .+ \b(\w+)\b }msx;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$who_said = $1;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$what_said =~ s{says, \&quot;(.*)\&quot;}{$1}g;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;### Got: $who_said&nbsp;&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;### Got: $what_said<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($what_said =~ qr{$mud_name}msxi){<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;### saw my name<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$atme = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$what_said =~ s{$mud_name}{}g;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ($atme) &amp;&amp; ($what_said =~ qr{QUIT}) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;QUIT&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ($atme) &amp;&amp; ($what_said =~ qr{be quiet}) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ($being_quiet) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say Maximum verbosity achieved.&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$being_quiet = 0;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say Shutting up now.&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$being_quiet = 1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ($atme) &amp;&amp; ($what_said =~ qr{search for &#039;(.*)&#039;}msxi) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $terms = $1;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my @terms = split $terms;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;my $querystring = join &#039;+&#039;, @terms;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say Found http://lmgtfy.com/q=$querystring&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ( ($atme) &amp;&amp; ($what_said =~ qr{explore}) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say OK, going to poke around now.&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sleep 3;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&#039;home&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;goto EXPLORELOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($being_quiet) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;next TALKLOOP;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $response = $robot-&gt;tell($what_said);<br />
&nbsp;&nbsp;&nbsp;&nbsp;if ($atme) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;response: $response\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speak( $response );<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;else {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if ( !$being_quiet &amp;&amp; (rand() &gt; .75) ) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;print &quot;jumping in with $response\n&quot;;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;speak( $response );<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
<br />
EXPLORELOOP: while (1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;### exploring<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;my ($name, $desc);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&#039;look&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $startmark&nbsp;&nbsp; = $mud_connection-&gt;getline( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;$name&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = $mud_connection-&gt;getline( );<br />
&nbsp;&nbsp;&nbsp;&nbsp;while (my $line = $mud_connection-&gt;getline( Errmode =&gt; &#039;return&#039;, )) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$desc .= $line;<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;waitfor( Match =&gt; &#039;/END$pid/&#039;, Errmode =&gt; &#039;return&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;chomp $name;<br />
&nbsp;&nbsp;&nbsp;&nbsp;chomp $desc;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;### got: $name<br />
&nbsp;&nbsp;&nbsp;&nbsp;### got: $desc<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$room_name{$name} = $desc;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;sleep 10;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&#039;out&#039;);<br />
}<br />
<br />
sub setup {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $mc = shift;<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;dump_log(&#039;/home/binder/src/mb/logfile&#039;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;waitfor(&#039;/connect\s+guest\s+guest/&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&quot;connect $mud_name $mud_pass&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;waitfor(&#039;/Vote to ban the MisInformation SuperHighway/&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&#039;@desc me=Just a Perl toy of Binder\&#039;s.&#039;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&quot;OUTPUTPREFIX START$pid&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&quot;OUTPUTSUFFIX END$pid&quot;);<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;waitfor(&#039;/Description set/&#039;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mc-&gt;print(&quot;home\nout\nvillage&quot;);<br />
}<br />
<br />
sub speak {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $response = shift;<br />
&nbsp;&nbsp;&nbsp;&nbsp;my @lines = split /\n/, $response;<br />
&nbsp;&nbsp;&nbsp;&nbsp;for my $line (@lines) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$mud_connection-&gt;print(&quot;say $line&quot;);<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
}<br />
</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.manjusri.org/2009/04/19/the-bot-who-came-in-out-of-the-cold/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Another Sixty Minutes Down</title>
		<link>http://blog.manjusri.org/2009/04/17/another-sixty-minutes-down/</link>
		<comments>http://blog.manjusri.org/2009/04/17/another-sixty-minutes-down/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 16:40:03 +0000</pubDate>
		<dc:creator>binder</dc:creator>
				<category><![CDATA[Nerdery]]></category>
		<category><![CDATA[aiml]]></category>
		<category><![CDATA[chatbot]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.manjusri.org/?p=169</guid>
		<description><![CDATA[And the bot is now both more and less annoying. Updated code below. [[code]]czozNTE1OlwiDQojIS91c3IvYmluL3BlcmwNCg0KIyBtdWRib3QgYnkgU2hhbm5vbiBQcmlja2V0dCA8c3RwQG1hbmp1c3JpLm9yZz57WyYqJl19DQojIGNvbm5lY3QgYSBwYW5kb3JhYm90cy5jb20gY2hhdGJvdCB3aXRoIGEgcGFydGljdWxhciBUaW55TVVDSywgUGVnYXN1cy4NCntbJiomXX0NCnBhY2thZ2UgbXVkYm90Ow0KdXNlIE1vZGVybjo6UGVybDsNCnVzZSBOZXQ6OlRlbG5ldDsNCnVzZSBOZXQ6OkFJTUw7DQp1c2Uge1smKiZdfUV4cGVjdDsNCg0KdXNlIHZhcnMgcXd7JG11ZF9jb25uZWN0aW9uICRtdWRfY29udmVyc2F0aW9uICRtdWRfaG9zdCAkbXVkX25hbWV7WyYqJl19ICRtdWRfcGFzcyAkbXVkX3BvcnQgJG11ZF9zZW50ICRyb2JvdH07DQoNCiRtdWRfaG9zdCA9IFwnZ2lua2EuYXJtYWdlZGRvbi5vcmd7WyYqJl19XCc7DQokbXVkX3BvcnQgPSBcJzQyNDJcJzsNCiRtdWRfbmFtZSA9IFwnU29tZWJvdFwnOw0KJG11ZF9wYXNzID0gXCdZUk1FTUVcJzsNCg0KJHJ7WyYqJl19b2JvdCA9IE5ldDo6QUlNTC0+bmV3KCBib3RpZCA9PiBcJ0dFVFRISVNOVU1CRVJGUk9NUEFORE9SQUJPVFNcJyApOyANCg0KJG11ZF9je1smKiZdfW9ubmVjdGlvbiA9IG5ldyBOZXQ6OlRlbG5ldCggSG9zdCA9PiAkbXVkX2hvc3QsIFBvcnQgPT4gJG11ZF9wb3J0ICkNCiAgICBvciB7WyYqJl19ZGllIFwiQ2FuXCd0IGNvbm5lY3QgdG8gJG11ZF9ob3N0ICRtdWRfcG9ydDogJCFcIjsNCg0KJG11ZF9jb252ZXJzYXRpb24gPSBFeHBlY3tbJiomXX10LT5leHBfaW5pdCgkbXVkX2Nvbm5lY3Rpb24pOw0KDQokbXVkX2NvbnZlcnNhdGlvbi0+bG9nX2dyb3VwKDEpOw0KJG11ZF9jb252e1smKiZdfWVyc2F0aW9uLT5sb2dfdXNlcigxKTsNCiRtdWRfY29udmVyc2F0aW9uLT5sb2dfc3Rkb3V0KDEpOw0KJG11ZF9jb252ZXJzYXRpb257WyYqJl19LT5sb2dfZmlsZShcIi9ob21lL2JpbmRlci9zcmMvbWIvbG9nZmlsZVwiLCBcJ3dcJyk7DQoNCiRtdWRfY29udmVyc2F0aW9uLT5leHBlY3R7WyYqJl19KDMwLCAgIFwnLXJlXCcsIHFye2Nvbm5lY3QgICAgICAgIyBwcmV0dHkgc3RhbmRhcmQgTVVDSyBncmVldGluZw0KICAgICAgICAgICAge1smKiZdfSAgICAgICAgICAgICAgICAgICAgICAgIFxccysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXN0DQogICAge1smKiZdfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxzKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vle1smKiZdfXN0fW1zeCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19ICAgICAgICAgbXkgJGZoID0gc2hpZnQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmgtPnNlbmQoXCJjb257WyYqJl19bmVjdCAkbXVkX25hbWUgJG11ZF9wYXNzXFxuXCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiRte1smKiZdfXVkX2NvbnZlcnNhdGlvbi0+ZXhwZWN0KDMwLCBcJ1ZvdGUgdG8gYmFuIHRoZSBNaXNJbmZvcm1hdGlvbiBTdXBlckhpZ2h3YXlcJywNCntbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGZoID0ge1smKiZdfXNoaWZ0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmgtPnNlbmQoXCJcXEBkZXNjIG1lPUp1c3QgYSBQZXJsIHRveXtbJiomXX0gb2YgQmluZGVyXCdzLlxcblwiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiRtdWRfY29udmVyc2F0aW9ue1smKiZdfS0+ZXhwZWN0KDMwLCBcJ0Rlc2NyaXB0aW9uIHNldFwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiB7DQogICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICBteSAkZmggPSBzaGlmdDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZoe1smKiZdfS0+c2VuZChcImhvbWVcXG5vdXRcXG52aWxsYWdlXFxuXCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KDQpUQXtbJiomXX1MS0xPT1A6IHdoaWxlICgxKSB7DQogICAgcHJpbnQgXCJUQUxLTE9PUCBzdGFydFxcblwiOw0KDQogICAgbXkgJGJlaW5nX3F1aWV0ID0ge1smKiZdfTA7DQogICAgbXkgJGF0bWUgPSAwOw0KICAgIG15ICRwcmVtYXRjaCA9IFwnXCc7DQogICAgbXkgJHBvc3RtYXRjaCA9IFwnXCc7DQoNCiAge1smKiZdfSAgbXkgJGluZGV4ID0gJG11ZF9jb252ZXJzYXRpb24tPmV4cGVjdCggNjAsIFwnLXJlXCcsIHFyeyBzYXlzLCBcIn0gKTsgIA0KDQogICB7WyYqJl19ICRwcmVtYXRjaCA9ICRtdWRfY29udmVyc2F0aW9uLT5iZWZvcmUoKTsNCiAgICAkcG9zdG1hdGNoID0gJG11ZF9jb252ZXJzYXRpb3tbJiomXX1uLT5hZnRlcigpOw0KICAgICRtdWRfY29udmVyc2F0aW9uLT5jbGVhcl9hY2N1bSgpOw0KDQogICAgbmV4dCBUQUxLTE9PUCB1bmxle1smKiZdfXNzICRwcmVtYXRjaDsNCg0KICAgICRwb3N0bWF0Y2ggPX4gc3tcXFwifXt9Ow0KICAgIHByaW50IFwiJHByZW1hdGNoIHNhaWQgJHBvc3R7WyYqJl19bWF0Y2hcXG5cIjsNCg0KDQogICAgaWYgKCRwb3N0bWF0Y2ggPX4gcXJ7JG11ZF9uYW1lfSl7DQogICAgICAgIHByaW50IFwic2F3IG15IHtbJiomXX1uYW1lXFxuXCI7DQogICAgICAgICRwb3N0bWF0Y2ggPX4gc3skbXVkX25hbWV9e1BlcnNlcGhvbmV9ZzsNCiAgICAgICAgJGF0bWUgPSB7WyYqJl19MTsNCiAgICB9DQoNCiAgICBpZiAoICgkYXRtZSkgJiYgKCRwb3N0bWF0Y2ggPX4gcXJ7UVVJVH0pICkgew0KICAgICAgICAkbXVkX3tbJiomXX1jb252ZXJzYXRpb24tPnNlbmQoXCJRVUlUXFxuXCIpOw0KICAgICAgICBleGl0Ow0KICAgIH0NCg0KICAgIGlmICggKCRhdG1lKSAmJiAoe1smKiZdfSRwb3N0bWF0Y2ggPX4gcXJ7YmUgcXVpZXR9KSApIHsNCiAgICAgICAgaWYgKCRiZWluZ19xdWlldCkgew0KICAgICAgICAgICAgJG17WyYqJl19dWRfY29udmVyc2F0aW9uLT5zZW5kKFwic2F5IE1heGltdW0gdmVyYm9zaXR5IGFjaGlldmVkLlxcblwiKTsNCiAgICAgICAgICAgICRiZXtbJiomXX1pbmdfcXVpZXQgPSAwOw0KICAgICAgICB9IGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgJG11ZF9jb252ZXJzYXRpb24tPnNle1smKiZdfW5kKFwic2F5IFNodXR0aW5nIHVwIG5vdy5cXG5cIik7DQogICAgICAgICAgICAkYmVpbmdfcXVpZXQgPSAxOw0KICAgICAgICB9DQogICB7WyYqJl19IH0NCg0KICAgIGlmICgkYmVpbmdfcXVpZXQpIHsNCiAgICAgICAgbmV4dCBUQUxLTE9PUDsNCiAgICB9DQoNCiAgICBpZiAoJGF0bXtbJiomXX1lKSB7DQogICAgICAgIG15ICRyZXNwb25zZSA9ICRyb2JvdC0+dGVsbCgkcG9zdG1hdGNoKTsNCiAgICAgICAgcHJpbnQgXCJyZXNwb3tbJiomXX1uc2U6ICRyZXNwb25zZVxcblwiOw0KICAgICAgICAkbXVkX2NvbnZlcnNhdGlvbi0+c2VuZChcInNheSAkcmVzcG9uc2VcXG5cIik7DQogICB7WyYqJl19IH0NCiAgICBlbHNlIHsNCiAgICAgICAgaWYgKCAhJGJlaW5nX3F1aWV0ICYmIChyYW5kKCkgPiAuNzUpICkgew0KICAgICAgICAgIHtbJiomXX0gIHByaW50IFwianVtcGluZyBpblxcblwiOw0KICAgICAgICAgICAgbXkgJHJlc3BvbnNlID0gJHJvYm90LT50ZWxsKCRwb3N0bWF0Y2gpe1smKiZdfTsNCiAgICAgICAgICAgIHByaW50IFwicmVzcG9uc2U6ICRyZXNwb25zZVxcblwiOw0KICAgICAgICAgICAgJG11ZF9jb252ZXJzYXRpb257WyYqJl19LT5zZW5kKFwic2F5ICRyZXNwb25zZVxcblwiKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCmNvbnRpbnVlIHsNCiAgICAkbXVkX2NvbnZlcntbJiomXX1zYXRpb24tPmNsZWFyX2FjY3VtKCk7DQp9DQpcIjt7WyYqJl19[[/code]]]]></description>
			<content:encoded><![CDATA[<p>And the bot is now both more and less annoying.  Updated code below.</p>
<p><pre><pre><br />
[[code]]czozNTE1OlwiDQojIS91c3IvYmluL3BlcmwNCg0KIyBtdWRib3QgYnkgU2hhbm5vbiBQcmlja2V0dCA8c3RwQG1hbmp1c3JpLm9yZz57WyYqJl19DQojIGNvbm5lY3QgYSBwYW5kb3JhYm90cy5jb20gY2hhdGJvdCB3aXRoIGEgcGFydGljdWxhciBUaW55TVVDSywgUGVnYXN1cy4NCntbJiomXX0NCnBhY2thZ2UgbXVkYm90Ow0KdXNlIE1vZGVybjo6UGVybDsNCnVzZSBOZXQ6OlRlbG5ldDsNCnVzZSBOZXQ6OkFJTUw7DQp1c2Uge1smKiZdfUV4cGVjdDsNCg0KdXNlIHZhcnMgcXd7JG11ZF9jb25uZWN0aW9uICRtdWRfY29udmVyc2F0aW9uICRtdWRfaG9zdCAkbXVkX25hbWV7WyYqJl19ICRtdWRfcGFzcyAkbXVkX3BvcnQgJG11ZF9zZW50ICRyb2JvdH07DQoNCiRtdWRfaG9zdCA9IFwnZ2lua2EuYXJtYWdlZGRvbi5vcmd7WyYqJl19XCc7DQokbXVkX3BvcnQgPSBcJzQyNDJcJzsNCiRtdWRfbmFtZSA9IFwnU29tZWJvdFwnOw0KJG11ZF9wYXNzID0gXCdZUk1FTUVcJzsNCg0KJHJ7WyYqJl19b2JvdCA9IE5ldDo6QUlNTC0+bmV3KCBib3RpZCA9PiBcJ0dFVFRISVNOVU1CRVJGUk9NUEFORE9SQUJPVFNcJyApOyANCg0KJG11ZF9je1smKiZdfW9ubmVjdGlvbiA9IG5ldyBOZXQ6OlRlbG5ldCggSG9zdCA9PiAkbXVkX2hvc3QsIFBvcnQgPT4gJG11ZF9wb3J0ICkNCiAgICBvciB7WyYqJl19ZGllIFwiQ2FuXCd0IGNvbm5lY3QgdG8gJG11ZF9ob3N0ICRtdWRfcG9ydDogJCFcIjsNCg0KJG11ZF9jb252ZXJzYXRpb24gPSBFeHBlY3tbJiomXX10LT5leHBfaW5pdCgkbXVkX2Nvbm5lY3Rpb24pOw0KDQokbXVkX2NvbnZlcnNhdGlvbi0+bG9nX2dyb3VwKDEpOw0KJG11ZF9jb252e1smKiZdfWVyc2F0aW9uLT5sb2dfdXNlcigxKTsNCiRtdWRfY29udmVyc2F0aW9uLT5sb2dfc3Rkb3V0KDEpOw0KJG11ZF9jb252ZXJzYXRpb257WyYqJl19LT5sb2dfZmlsZShcIi9ob21lL2JpbmRlci9zcmMvbWIvbG9nZmlsZVwiLCBcJ3dcJyk7DQoNCiRtdWRfY29udmVyc2F0aW9uLT5leHBlY3R7WyYqJl19KDMwLCAgIFwnLXJlXCcsIHFye2Nvbm5lY3QgICAgICAgIyBwcmV0dHkgc3RhbmRhcmQgTVVDSyBncmVldGluZw0KICAgICAgICAgICAge1smKiZdfSAgICAgICAgICAgICAgICAgICAgICAgIFxccysNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGd1ZXN0DQogICAge1smKiZdfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxzKw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3Vle1smKiZdfXN0fW1zeCwgDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICB7WyYqJl19ICAgICAgICAgbXkgJGZoID0gc2hpZnQ7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmgtPnNlbmQoXCJjb257WyYqJl19bmVjdCAkbXVkX25hbWUgJG11ZF9wYXNzXFxuXCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiRte1smKiZdfXVkX2NvbnZlcnNhdGlvbi0+ZXhwZWN0KDMwLCBcJ1ZvdGUgdG8gYmFuIHRoZSBNaXNJbmZvcm1hdGlvbiBTdXBlckhpZ2h3YXlcJywNCntbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3ViIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJGZoID0ge1smKiZdfXNoaWZ0Ow0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkZmgtPnNlbmQoXCJcXEBkZXNjIG1lPUp1c3QgYSBQZXJsIHRveXtbJiomXX0gb2YgQmluZGVyXCdzLlxcblwiKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7DQoNCiRtdWRfY29udmVyc2F0aW9ue1smKiZdfS0+ZXhwZWN0KDMwLCBcJ0Rlc2NyaXB0aW9uIHNldFwnLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YiB7DQogICAgICAgIHtbJiomXX0gICAgICAgICAgICAgICAgICAgICAgICBteSAkZmggPSBzaGlmdDsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJGZoe1smKiZdfS0+c2VuZChcImhvbWVcXG5vdXRcXG52aWxsYWdlXFxuXCIpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTsNCg0KDQpUQXtbJiomXX1MS0xPT1A6IHdoaWxlICgxKSB7DQogICAgcHJpbnQgXCJUQUxLTE9PUCBzdGFydFxcblwiOw0KDQogICAgbXkgJGJlaW5nX3F1aWV0ID0ge1smKiZdfTA7DQogICAgbXkgJGF0bWUgPSAwOw0KICAgIG15ICRwcmVtYXRjaCA9IFwnXCc7DQogICAgbXkgJHBvc3RtYXRjaCA9IFwnXCc7DQoNCiAge1smKiZdfSAgbXkgJGluZGV4ID0gJG11ZF9jb252ZXJzYXRpb24tPmV4cGVjdCggNjAsIFwnLXJlXCcsIHFyeyBzYXlzLCBcIn0gKTsgIA0KDQogICB7WyYqJl19ICRwcmVtYXRjaCA9ICRtdWRfY29udmVyc2F0aW9uLT5iZWZvcmUoKTsNCiAgICAkcG9zdG1hdGNoID0gJG11ZF9jb252ZXJzYXRpb3tbJiomXX1uLT5hZnRlcigpOw0KICAgICRtdWRfY29udmVyc2F0aW9uLT5jbGVhcl9hY2N1bSgpOw0KDQogICAgbmV4dCBUQUxLTE9PUCB1bmxle1smKiZdfXNzICRwcmVtYXRjaDsNCg0KICAgICRwb3N0bWF0Y2ggPX4gc3tcXFwifXt9Ow0KICAgIHByaW50IFwiJHByZW1hdGNoIHNhaWQgJHBvc3R7WyYqJl19bWF0Y2hcXG5cIjsNCg0KDQogICAgaWYgKCRwb3N0bWF0Y2ggPX4gcXJ7JG11ZF9uYW1lfSl7DQogICAgICAgIHByaW50IFwic2F3IG15IHtbJiomXX1uYW1lXFxuXCI7DQogICAgICAgICRwb3N0bWF0Y2ggPX4gc3skbXVkX25hbWV9e1BlcnNlcGhvbmV9ZzsNCiAgICAgICAgJGF0bWUgPSB7WyYqJl19MTsNCiAgICB9DQoNCiAgICBpZiAoICgkYXRtZSkgJiYgKCRwb3N0bWF0Y2ggPX4gcXJ7UVVJVH0pICkgew0KICAgICAgICAkbXVkX3tbJiomXX1jb252ZXJzYXRpb24tPnNlbmQoXCJRVUlUXFxuXCIpOw0KICAgICAgICBleGl0Ow0KICAgIH0NCg0KICAgIGlmICggKCRhdG1lKSAmJiAoe1smKiZdfSRwb3N0bWF0Y2ggPX4gcXJ7YmUgcXVpZXR9KSApIHsNCiAgICAgICAgaWYgKCRiZWluZ19xdWlldCkgew0KICAgICAgICAgICAgJG17WyYqJl19dWRfY29udmVyc2F0aW9uLT5zZW5kKFwic2F5IE1heGltdW0gdmVyYm9zaXR5IGFjaGlldmVkLlxcblwiKTsNCiAgICAgICAgICAgICRiZXtbJiomXX1pbmdfcXVpZXQgPSAwOw0KICAgICAgICB9IGVsc2UNCiAgICAgICAgew0KICAgICAgICAgICAgJG11ZF9jb252ZXJzYXRpb24tPnNle1smKiZdfW5kKFwic2F5IFNodXR0aW5nIHVwIG5vdy5cXG5cIik7DQogICAgICAgICAgICAkYmVpbmdfcXVpZXQgPSAxOw0KICAgICAgICB9DQogICB7WyYqJl19IH0NCg0KICAgIGlmICgkYmVpbmdfcXVpZXQpIHsNCiAgICAgICAgbmV4dCBUQUxLTE9PUDsNCiAgICB9DQoNCiAgICBpZiAoJGF0bXtbJiomXX1lKSB7DQogICAgICAgIG15ICRyZXNwb25zZSA9ICRyb2JvdC0+dGVsbCgkcG9zdG1hdGNoKTsNCiAgICAgICAgcHJpbnQgXCJyZXNwb3tbJiomXX1uc2U6ICRyZXNwb25zZVxcblwiOw0KICAgICAgICAkbXVkX2NvbnZlcnNhdGlvbi0+c2VuZChcInNheSAkcmVzcG9uc2VcXG5cIik7DQogICB7WyYqJl19IH0NCiAgICBlbHNlIHsNCiAgICAgICAgaWYgKCAhJGJlaW5nX3F1aWV0ICYmIChyYW5kKCkgPiAuNzUpICkgew0KICAgICAgICAgIHtbJiomXX0gIHByaW50IFwianVtcGluZyBpblxcblwiOw0KICAgICAgICAgICAgbXkgJHJlc3BvbnNlID0gJHJvYm90LT50ZWxsKCRwb3N0bWF0Y2gpe1smKiZdfTsNCiAgICAgICAgICAgIHByaW50IFwicmVzcG9uc2U6ICRyZXNwb25zZVxcblwiOw0KICAgICAgICAgICAgJG11ZF9jb252ZXJzYXRpb257WyYqJl19LT5zZW5kKFwic2F5ICRyZXNwb25zZVxcblwiKTsNCiAgICAgICAgfQ0KICAgIH0NCn0NCmNvbnRpbnVlIHsNCiAgICAkbXVkX2NvbnZlcntbJiomXX1zYXRpb24tPmNsZWFyX2FjY3VtKCk7DQp9DQpcIjt7WyYqJl19[[/code]]<br />
</pre></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.manjusri.org/2009/04/17/another-sixty-minutes-down/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>The Sixty Minute MUDbot.</title>
		<link>http://blog.manjusri.org/2009/04/16/the-sixty-minute-mudbot/</link>
		<comments>http://blog.manjusri.org/2009/04/16/the-sixty-minute-mudbot/#comments</comments>
		<pubDate>Fri, 17 Apr 2009 07:13:56 +0000</pubDate>
		<dc:creator>binder</dc:creator>
				<category><![CDATA[Nerdery]]></category>
		<category><![CDATA[chatbot]]></category>
		<category><![CDATA[perl]]></category>

		<guid isPermaLink="false">http://blog.manjusri.org/?p=164</guid>
		<description><![CDATA[I decided to scratch an itch and practice a little bit of the Manifesto of the Cult of Done tonight.  So I wrote a clunky and fragile Perl wrapper which ties a chatbot to a MUCK.  Here&#8217;s the code. &#60;pre&#62; #!/usr/bin/perl # mudbot by Shannon Prickett &#60;stp@manjusri.org&#62; # connect a pandorabots.com chatbot with a particular [...]]]></description>
			<content:encoded><![CDATA[<p>I decided to scratch an itch and practice a little bit of the <a href="http://www.brepettis.com/blog/2009/3/3/the-cult-of-done-manifesto.html">Manifesto of the Cult of Done</a> tonight.  So I wrote a clunky and fragile Perl wrapper which ties a chatbot to a MUCK.  Here&#8217;s the code.</p>
<p><pre><code><br />
&lt;pre&gt;<br />
#!/usr/bin/perl<br />
<br />
# mudbot by Shannon Prickett &lt;stp@manjusri.org&gt;<br />
# connect a pandorabots.com chatbot with a particular TinyMUCK, Pegasus.<br />
<br />
package mudbot;<br />
use Modern::Perl;<br />
use Net::Telnet;<br />
use Net::AIML;<br />
use Expect;<br />
<br />
use vars qw{$mud_connection $mud_conversation $mud_host $mud_name $mud_pass $mud_port $mud_sent $robot};<br />
<br />
$mud_host = &#039;ginka.armageddon.org&#039;;<br />
$mud_port = &#039;4242&#039;;<br />
$mud_name = &#039;Somebot&#039;;<br />
$mud_pass = &#039;YRMEME&#039;;<br />
<br />
$robot = Net::AIML-&gt;new( botid =&gt; &#039;GETTHISNUMBERFROMPANDORABOTS&#039; ); <br />
<br />
$mud_connection = new Net::Telnet( Host =&gt; $mud_host, Port =&gt; $mud_port )<br />
&nbsp;&nbsp;&nbsp;&nbsp;or die &quot;Can&#039;t connect to $mud_host $mud_port: $!&quot;;<br />
<br />
$mud_conversation = Expect-&gt;exp_init($mud_connection);<br />
<br />
$mud_conversation-&gt;log_group(1);<br />
$mud_conversation-&gt;log_user(1);<br />
$mud_conversation-&gt;log_stdout(1);<br />
$mud_conversation-&gt;log_file(&quot;/home/binder/src/mb/logfile&quot;, &#039;w&#039;);<br />
<br />
$mud_conversation-&gt;expect(30,&nbsp;&nbsp; &#039;-re&#039;, qr{connect&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; # pretty standard MUCK greeting<br />
&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;\s+<br />
&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;guest<br />
&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;\s+<br />
&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;guest}msx, <br />
&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;sub {<br />
&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 $fh = shift;<br />
&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;$fh-&gt;send(&quot;connect $mud_name $mud_pass\n&quot;);<br />
&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;});<br />
<br />
$mud_conversation-&gt;expect(30, &#039;Vote to ban the MisInformation SuperHighway&#039;,<br />
&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;sub {<br />
&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 $fh = shift;<br />
&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;$fh-&gt;send(&quot;\@desc me=Just a Perl toy of Binder&#039;s.\n&quot;);<br />
&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;});<br />
<br />
$mud_conversation-&gt;expect(30, &#039;Description set&#039;,<br />
&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;sub {<br />
&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 $fh = shift;<br />
&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;$fh-&gt;send(&quot;home\nout\nvillage\n&quot;);<br />
&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;});<br />
<br />
while (1) {<br />
&nbsp;&nbsp;&nbsp;&nbsp;my $command;<br />
&nbsp;&nbsp;&nbsp;&nbsp;$mud_conversation-&gt;expect(3, <br />
&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; &#039;-re&#039;, <br />
&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; qr{ Somebot }msx, <br />
&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; sub {&nbsp;&nbsp;my $fh = shift;<br />
&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;$command = $mud_conversation-&gt;after();<br />
&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;$command =~ tr{\,\&quot;\.\!}{}d;<br />
&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;print &quot;matched: $command\n&quot;;<br />
&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;if ($command =~ qr{QUIT}) {<br />
&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;$fh-&gt;send(&quot;QUIT\n&quot;);<br />
&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;exit;<br />
&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;} else<br />
&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;{<br />
&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;if (length($command)&gt;3) {<br />
&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;&nbsp;&nbsp;&nbsp;my $response = $robot-&gt;tell($command);<br />
&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;&nbsp;&nbsp;&nbsp;$fh-&gt;send(&quot;say $response\n&quot;);<br />
&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;} <br />
&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;}<br />
&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;}<br />
&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;);<br />
}<br />
&lt;/pre&gt;<br />
</code></pre></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.manjusri.org/2009/04/16/the-sixty-minute-mudbot/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

