<?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>Jeremy Smyth's Blog &#187; Perl</title>
	<atom:link href="http://jeremysmyth.com/category/perl/feed/" rel="self" type="application/rss+xml" />
	<link>http://jeremysmyth.com</link>
	<description></description>
	<lastBuildDate>Sat, 25 Jun 2011 12:58:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Redacting Text the Dan Brown Way.</title>
		<link>http://jeremysmyth.com/2009/09/20/redacting-text-the-dan-brown-way/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=redacting-text-the-dan-brown-way</link>
		<comments>http://jeremysmyth.com/2009/09/20/redacting-text-the-dan-brown-way/#comments</comments>
		<pubDate>Sun, 20 Sep 2009 16:40:26 +0000</pubDate>
		<dc:creator>Jeremy Smyth</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://jeremysmyth.com/?p=166</guid>
		<description><![CDATA[Dan Brown&#8217;s The Lost Symbol makes a passing reference to some &#8220;redacted text&#8221;, where only a highlighted portion of the text becomes available.
In the story, we find a redacted text where results appear like this:
######## secret location UNDERGROUND where the ########
######## somewhere in WASHINGTON D.C., the coordinates ########
######## uncovered an ANCIENT PORTAL that led ###########
######## [...]]]></description>
			<content:encoded><![CDATA[<p>Dan Brown&#8217;s <a href="http://www.amazon.com/gp/product/0385504225?ie=UTF8&#038;tag=jeremysmyth-20&#038;linkCode=as2&#038;camp=1789&#038;creative=390957&#038;creativeASIN=0385504225">The Lost Symbol</a><img src="http://www.assoc-amazon.com/e/ir?t=jeremysmyth-20&#038;l=as2&#038;o=1&#038;a=0385504225" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" /> makes a passing reference to some &#8220;redacted text&#8221;, where only a highlighted portion of the text becomes available.</p>
<p>In the story, we find a redacted text where results appear like this:</p>
<p>######## secret location UNDERGROUND where the ########<br />
######## somewhere in WASHINGTON D.C., the coordinates ########<br />
######## uncovered an ANCIENT PORTAL that led ###########<br />
######## warning the PYRAMID holds dangerous ###########<br />
######## decipher this ENGRAVED SYMBOLON to unveil #######</p>
<p>&#8230;so Trish Dunne, a metasystems expert, constructs a spider to find the document for Katherine Solomon, but the document itself had been redacted.</p>
<p>Now, constructing a &#8220;search spider&#8221; is not exactly the technical exercise Dan Brown makes it out to be, but the redacted text the search spider produced got me thinking.</p>
<p>A while back, I put together a regular expression for someone who wanted their search engine to produce a <em>summary</em> of searched text, only showing the surrounding words. This isn&#8217;t exactly what Trish achieves, but it gave me an idea&#8230;.</p>
<p>Although it&#8217;s not a common requirement, redacting text looks like a bit of fun. Let&#8217;s try it in Perl. Given the following input text, let&#8217;s do a bit of searching and redacting:</p>
<blockquote><p>&#8220;Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum&#8221;</p></blockquote>
<p />
<p>Right. Let&#8217;s look for the words &#8220;dolor&#8221;, &#8220;nisi&#8221;, and &#8220;officia deserunt&#8221;:</p>
<pre>
<div class="codesnip-container" >
<div class="perl codesnip" style="font-family:monospace;"><span class="co1">#!/usr/bin/perl -w</span>

<span class="re0">$match</span> <span class="sy0">=</span> <span class="st0">&quot;dolor|nisi|officia deserunt&quot;</span><span class="sy0">;</span>

<span class="kw1">while</span><span class="br0">&#40;</span><span class="sy0">&lt;&gt;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">while</span><span class="br0">&#40;</span><a href="http://perldoc.perl.org/functions/m.html"><span class="kw3">m</span></a><span class="sy0">!</span><span class="br0">&#40;</span><span class="br0">&#40;</span><span class="sy0">?:</span><span class="re0">\w</span><span class="sy0">+</span><span class="re0">\b</span>\<a href="http://perldoc.perl.org/functions/s.html"><span class="kw3">s</span></a><span class="sy0">*</span><span class="br0">&#41;</span><span class="br0">&#123;</span>2<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span class="re0">$match</span><span class="br0">&#41;</span><span class="br0">&#40;</span><span class="re0">\w</span><span class="sy0">*</span>\<a href="http://perldoc.perl.org/functions/s.html"><span class="kw3">s</span></a><span class="sy0">*</span><span class="br0">&#40;</span><span class="sy0">?:</span><span class="re0">\w</span><span class="sy0">+</span><span class="re0">\b</span>\<a href="http://perldoc.perl.org/functions/s.html"><span class="kw3">s</span></a><span class="sy0">*</span><span class="br0">&#41;</span><span class="br0">&#123;</span>2<span class="br0">&#125;</span><span class="br0">&#41;</span><span class="sy0">!</span>g<span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$x</span> <span class="sy0">=</span> <span class="co5">$`</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$y</span> <span class="sy0">=</span> <span class="st0">&quot;$1<span class="es0">\U</span>$2<span class="es0">\E</span>$3&quot;</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co5">$_</span> <span class="sy0">=</span> <span class="co5">$'</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; 
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$x</span> <span class="sy0">=~</span> <span class="co2">tr/A-Za-z/#/</span><span class="sy0">;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="st0">&quot;$x$y&quot;</span><span class="sy0">;</span>
&nbsp; &nbsp; <span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="co2">tr/A-Za-z/#/</span><span class="sy0">;</span>
&nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a><span class="sy0">;</span>
<span class="br0">&#125;</span></div>
</div>
</pre>
<p>Now this isn&#8217;t quite as complex as we&#8217;d need it to be; although it allows multiple search words, and catches them all, it doesn&#8217;t catch longer strings of them. Nevermind, let&#8217;s see how it works.</p>
<p>Unsurprisingly, the match is the magic part. Here&#8217;s it exploded:</p>
<pre>
<div class="codesnip-container" >
<div class="perl codesnip" style="font-family:monospace;"><a href="http://perldoc.perl.org/functions/m.html"><span class="kw3">m</span></a><span class="sy0">!</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># start the match</span>
&nbsp; &nbsp; <span class="br0">&#40;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># find and remember the two words before the match</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="sy0">?:</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># define a word (but don't remember it)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">\w</span><span class="sy0">+</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># ...as a bunch of letters/numbers</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">\b</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># (stop matching letters/numbers!)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; \<a href="http://perldoc.perl.org/functions/s.html"><span class="kw3">s</span></a><span class="sy0">*</span> &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># ...followed by zero or more spaces/tabs/etc.</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#123;</span><span class="nu0">2</span><span class="br0">&#125;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># Now we know what a word is, we want two of them.</span>
&nbsp; &nbsp; <span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># that's the two words...</span>
&nbsp; &nbsp; <span class="br0">&#40;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Now remember the matched word itself.</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$match</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># Use the $match variable above. &nbsp; &nbsp;</span>
&nbsp; &nbsp; <span class="br0">&#41;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">#</span>
&nbsp; &nbsp; <span class="br0">&#40;</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># Now the next two words</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">\w</span><span class="sy0">*</span>\<a href="http://perldoc.perl.org/functions/s.html"><span class="kw3">s</span></a><span class="sy0">*</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;<span class="co1"># Any number of alphanum (even zero, because &quot;dolor&quot; </span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># should also match &quot;dolore&quot;) &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#40;</span><span class="sy0">?:</span> &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># second word (but don't remember it)</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">\w</span><span class="sy0">+</span><span class="re0">\b</span>\<a href="http://perldoc.perl.org/functions/s.html"><span class="kw3">s</span></a><span class="sy0">*</span> &nbsp; &nbsp;<span class="co1"># same as above</span>
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#41;</span><span class="br0">&#123;</span><span class="nu0">2</span><span class="br0">&#125;</span>
&nbsp; &nbsp; <span class="br0">&#41;</span>
<span class="sy0">!</span>gx &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># the &quot;!&quot; matches &quot;m!&quot; above, g matches globally</span>
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="co1"># The &quot;x&quot; is explained below.</span></div>
</div>
</pre>
<p>Little aside first: the exploded code above <em>is perfectly valid Perl</em>, and would work just as well as the code in the complete program above. The magic is performed by the <tt>x</tt> suffix on the expression; this tells perl to ignore whitespace and comments within a regular expression, and lets people like me explain what&#8217;s going on right there in the code. Handy, eh?</p>
<p>So, once we&#8217;ve identified each matching pattern, we display it (the <tt>$&amp;</tt>) after showing &#8220;<tt>#</tt>&#8221; for each letter that comes before the match (the <tt>$`</tt>). Then we reset the text to match (<tt>$_</tt>) to the remainder of the string, and go again.</p>
<p>(Another aside: if we wanted to replace the spaces and punctuation with &#8216;#&#8217;, as well as all letters, we could do this instead of the <tt>tr///</tt>: <tt>$x = '#' x length($x);</tt>)</p>
<p>At the end of matching, we fail to match any more, so we simply translate the remainder to hashes again.</p>
<p>After running it against our file, we get this:</p>
<blockquote><p>
Lorem ipsum DOLOR sit amet, ########### ########### ####, ### ## ####### ###### ########## ## labore et DOLORe magna aliqua. ## #### ## ##### ######, #### ####### ############ ullamco laboris NISI ut aliquip ## ## ####### #########. #### aute irure DOLOR in reprehenderit ## ######### ##### esse cillum DOLORe eu fugiat ##### ########. ######### #### ######## ######### ### ########, #### ## culpa qui OFFICIA DESERUNT mollit anim ## ### #######.</p></blockquote>
<p />
<p>Job done.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeremysmyth.com/2009/09/20/redacting-text-the-dan-brown-way/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Who&#8217;s Afraid of the Big Bad Bignum?</title>
		<link>http://jeremysmyth.com/2009/07/02/whos-afraid-of-the-big-bad-bignum/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=whos-afraid-of-the-big-bad-bignum</link>
		<comments>http://jeremysmyth.com/2009/07/02/whos-afraid-of-the-big-bad-bignum/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 12:48:15 +0000</pubDate>
		<dc:creator>Jeremy Smyth</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://jeremysmyth.com/?p=174</guid>
		<description><![CDATA[Short one this time.
If you&#8217;ve a bignum in Perl, it might be a bit intimidating. For example, how on Earth would you get the third last digit from an enormous number? Convert it to a string first? would that even work? Mod 1000? 
Fortunately, bignums are transparently available; once you&#8217;ve got one in a variable, [...]]]></description>
			<content:encoded><![CDATA[<p>Short one this time.</p>
<p>If you&#8217;ve a <a href=http://perldoc.perl.org/bignum.html><tt>bignum</tt></a> in Perl, it might be a bit intimidating. For example, how on Earth would you get the third last digit from an enormous number? Convert it to a string first? would that even <em>work</em>? Mod 1000? </p>
<p>Fortunately, bignums are transparently available; once you&#8217;ve got one in a variable, you treat it just like any other Perl scalar, so this will work:</p>
<pre>
<div class="codesnip-container" >
<div class="perl codesnip" style="font-family:monospace;"><span class="re0">$digit</span> <span class="sy0">=</span> <a href="http://perldoc.perl.org/functions/substr.html"><span class="kw3">substr</span></a><span class="br0">&#40;</span><span class="re0">$bignum</span><span class="sy0">,</span> <span class="sy0">-</span>3<span class="sy0">,</span> 1<span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p>Neat, eh?</p>
]]></content:encoded>
			<wfw:commentRss>http://jeremysmyth.com/2009/07/02/whos-afraid-of-the-big-bad-bignum/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to do application support: Padre</title>
		<link>http://jeremysmyth.com/2009/06/23/how-to-do-application-support-padre/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=how-to-do-application-support-padre</link>
		<comments>http://jeremysmyth.com/2009/06/23/how-to-do-application-support-padre/#comments</comments>
		<pubDate>Tue, 23 Jun 2009 21:50:56 +0000</pubDate>
		<dc:creator>Jeremy Smyth</dc:creator>
				<category><![CDATA[Perl]]></category>

		<guid isPermaLink="false">http://jeremysmyth.com/?p=42</guid>
		<description><![CDATA[I accidentally stumbled across Padre, a Perl-native IDE, the other day, and although I wasn&#8217;t hugely impressed with its featureset, I was massively impressed with one small aspect. It&#8217;s still fairly new, and although it&#8217;s only a year or so old, it already has quite a few necessary features.
I wouldn&#8217;t compare it to Eclipse or [...]]]></description>
			<content:encoded><![CDATA[<p>I accidentally stumbled across <a href="http://padre.perlide.org/">Padre</a>, a Perl-native IDE, the other day, and although I wasn&#8217;t hugely impressed with its featureset, I was massively impressed with one small aspect. It&#8217;s still fairly new, and although it&#8217;s only a year or so old, it already has quite a few necessary features.</p>
<p>I wouldn&#8217;t compare it to Eclipse or any other relatively mature IDE, but I was <em>massively</em> impressed with one idea, that of user support.</p>
<p>The <a href="http://padre.perlide.org/trac/wiki/Screenshots">screenshots</a> page almost casually refers to the &#8220;Live Support&#8221; option. Yes, they have Live Support. I&#8217;m sure it doesn&#8217;t come with a guarantee of instant access to the developers, but for an open source project, it&#8217;s pure genius. The developers and enthusiastic early-adopters probably hang out in the IRC channel anyway, even without any payment or expectation of payment. Tying this to the users, via a freely available web-based IRC client, is a remarkably clever use of existing technologies and the developer culture.</p>
<p>I&#8217;ve been to application-specific IRC channels before, and they tend to be polarised to either rather elitist &#8220;are you a developer? no? then buzz off&#8221; attitudes, or the opposite, policed by folk who like answering easy questions, and are therefore lording it over their own fiefdoms, kicking curious lurkers who want to pick up the accumulated wisdom by osmosis.</p>
<p>Padre is the first example I&#8217;ve seen where, rather than expecting the curious (or desperate) users to get onto IRC (IRC? what&#8217;s that?) themselves, the turn it into a clickable &#8220;Live Support&#8221; option, and bring the users to them with little or no difficulty.</p>
<p>I wish more applications did this.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeremysmyth.com/2009/06/23/how-to-do-application-support-padre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl editing with Eclipse</title>
		<link>http://jeremysmyth.com/2009/06/18/perl-editing-with-eclipse/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=perl-editing-with-eclipse</link>
		<comments>http://jeremysmyth.com/2009/06/18/perl-editing-with-eclipse/#comments</comments>
		<pubDate>Wed, 17 Jun 2009 23:30:55 +0000</pubDate>
		<dc:creator>Jeremy Smyth</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Debugging]]></category>
		<category><![CDATA[Eclipse]]></category>

		<guid isPermaLink="false">http://jeremysmyth.com/?p=35</guid>
		<description><![CDATA[Part of the problem with developing Java is the plethora of IDEs out there, and the lack of standardisation. It&#8217;s not really a problem with IDEs as much as with Java server platforms, as IDEs are largely the same; server platforms are rarely the same.
With Perl, the lack of standardisation in IDEs is not considered [...]]]></description>
			<content:encoded><![CDATA[<p>Part of the problem with developing Java is the plethora of IDEs out there, and the lack of standardisation. It&#8217;s not really a problem with IDEs as much as with Java server platforms, as IDEs are largely the same; server platforms are rarely the same.</p>
<p>With Perl, the lack of standardisation in IDEs is not considered as much a problem, for the simple reason that many Perl programmers are really old-school, and tend to prefer simple text editors. Most of my recent Perl work has been done through Vim.</p>
<p>However, after teaching a Java course recently through  a combination of Eclipse and ConTEXT, I had a look at Eclipse&#8217;s support for Perl, particularly with a view to debugging support; Vim doesn&#8217;t have native step-through debugging, and Eclipse seems already suited to things like that.</p>
<p>If you&#8217;re already familiar with debugging in Eclipse, then the <a href="http://www.epic-ide.org/download.php">EPIC plugin</a> is well worth looking at for its Perl support.</p>
<p>It&#8217;s got stepped debugging within the Debug perspective, just like Eclipse has with other languages. Its Perl support is not as strong as the Java support &#8212; the Watch features and relatively simple editor features like refactoring support leave a lot to be desired &#8212; but it&#8217;s got an easier learning curve than e.g. &#8220;perl -d&#8221; (the &#8217;standard&#8217; way to debug perl), or even learning a new editor like Emacs, with its Perl debugging integration. Of course, as a Vim user I haven&#8217;t even learned to hack Perl in Emacs&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://jeremysmyth.com/2009/06/18/perl-editing-with-eclipse/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Faking &#8220;Private&#8221; methods with Perl</title>
		<link>http://jeremysmyth.com/2008/12/14/faking-private-methods-with-perl/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=faking-private-methods-with-perl</link>
		<comments>http://jeremysmyth.com/2008/12/14/faking-private-methods-with-perl/#comments</comments>
		<pubDate>Sun, 14 Dec 2008 17:03:10 +0000</pubDate>
		<dc:creator>Jeremy Smyth</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Object-Oriented]]></category>
		<category><![CDATA[Private]]></category>

		<guid isPermaLink="false">http://jeremysmyth.com/?p=28</guid>
		<description><![CDATA[Although Perl doesn&#8217;t really do the whole OO concept of private/public access modifiers, it&#8217;s somewhat possible to approximate them using subroutine references.


my $print_rev = sub &#123; print scalar reverse $_&#91;0&#93;; &#125;;


Now we have a lexically scoped variable, visible only within its package, containing a reference to an anonymous sub.
Within our class/package, we call it by [...]]]></description>
			<content:encoded><![CDATA[<p>Although Perl doesn&#8217;t really do the whole OO concept of private/public access modifiers, it&#8217;s somewhat possible to approximate them using subroutine references.</p>
<pre>
<div class="codesnip-container" >
<div class="perl codesnip" style="font-family:monospace;"><span class="kw1">my</span> <span class="re0">$print_rev</span> <span class="sy0">=</span> <span class="kw2">sub</span> <span class="br0">&#123;</span> <a href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <a href="http://perldoc.perl.org/functions/scalar.html"><span class="kw3">scalar</span></a> <a href="http://perldoc.perl.org/functions/reverse.html"><span class="kw3">reverse</span></a> <span class="co5">$_</span><span class="br0">&#91;</span>0<span class="br0">&#93;</span><span class="sy0">;</span> <span class="br0">&#125;</span><span class="sy0">;</span></div>
</div>
</pre>
<p>Now we have a lexically scoped variable, visible only within its package, containing a reference to an anonymous sub.</p>
<p>Within our class/package, we call it by doing something like:</p>
<pre>
<div class="codesnip-container" >
<div class="perl codesnip" style="font-family:monospace;"><span class="re0">&amp;$print_rev</span><span class="br0">&#40;</span><span class="st0">&quot;Reversed!&quot;</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p>Voila! Instant private method!</p>
<p>note: this is partway to creating closures, which are functions declared at runtime with, with variables passed as parameter. I might mention them some other time.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeremysmyth.com/2008/12/14/faking-private-methods-with-perl/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Perl source-code formatting with Perltidy</title>
		<link>http://jeremysmyth.com/2008/11/06/perl-source-code-formatting-with-perltidy/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=perl-source-code-formatting-with-perltidy</link>
		<comments>http://jeremysmyth.com/2008/11/06/perl-source-code-formatting-with-perltidy/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 16:12:07 +0000</pubDate>
		<dc:creator>Jeremy Smyth</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[Formatting]]></category>
		<category><![CDATA[Perltidy]]></category>
		<category><![CDATA[Source-Code]]></category>

		<guid isPermaLink="false">http://jeremysmyth.com/?p=26</guid>
		<description><![CDATA[I was working on an open-source Perl application recently, paying particular attention to one of the modules within. Unfortunately, the formatting left a little to be desired, with a highly idiosyncratic and inconsistent level of indentation and use of bracketing.
Not one to be put off by this, I quickly installed perltidy, and ran it against [...]]]></description>
			<content:encoded><![CDATA[<p>I was working on an open-source Perl application recently, paying particular attention to one of the modules within. Unfortunately, the formatting left a little to be desired, with a highly idiosyncratic and inconsistent level of indentation and use of bracketing.</p>
<p>Not one to be put off by this, I quickly installed <em>perltidy</em>, and ran it against the file.</p>
<p><tt>perltidy Package.pm</tt></p>
<p>After a few seconds, this created a file in the same directory called Perltidy.pm.tdy, with various changes made to the formatting.</p>
<p>The manpage showed it had a huge number of options, allowing one to choose from various different styles. For the most part, I was happy with the defaults. Although when coding C or LPC I prefer 3-space indents rather than two, Perl&#8217;s frequent use of block early-returns and flow modifiers like <tt>last</tt> and <tt>next</tt> means it makes sense to outdent them slightly. It&#8217;s easier to read such outdents when using 4-space indents.</p>
<p>My chosen options, in the end, looked like this:<br />
 -b        &#8211; inplace tidying, saves the original file to .bak, rather than creating a newly-styled file with .tdy extension.<br />
 -ce       &#8211; cuddle elses &#8211; the default places <tt>else</tt> on a new line after the previous closing brace, which allows closing-side comments, but disrupts the flow of the if statement.<br />
 -syn      &#8211; do a syntax check with Perl while tidying<br />
 -okw      &#8211; outdent keywords like <tt>next</tt> and <tt>last</tt><br />
 -csc      &#8211; enable closing-side comments &#8211; comments after the closing brace of a long sub or conditional statement.<br />
 -csci=12  &#8211; minimum number of lines in a block to add closing-side comment &#8211; the default is 6.</p>
<p><tt>perltidy -b -ce -syn -okw -csc -csci=12 Package.pm</tt></p>
<p>The problem now is how to check my changes back in without seriously upsetting the package maintainer; almost every line in the package has been changed, so the patch will be practically impossible for him to verify. Oh, well.</p>
]]></content:encoded>
			<wfw:commentRss>http://jeremysmyth.com/2008/11/06/perl-source-code-formatting-with-perltidy/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Object-Oriented Perl: Inheritance, and why it&#8217;s not Java</title>
		<link>http://jeremysmyth.com/2008/10/19/object-oriented-perl-inheritance-and-why-its-not-java/?utm_source=rss&amp;utm_medium=rss&amp;utm_campaign=object-oriented-perl-inheritance-and-why-its-not-java</link>
		<comments>http://jeremysmyth.com/2008/10/19/object-oriented-perl-inheritance-and-why-its-not-java/#comments</comments>
		<pubDate>Sun, 19 Oct 2008 21:42:19 +0000</pubDate>
		<dc:creator>Jeremy Smyth</dc:creator>
				<category><![CDATA[Perl]]></category>
		<category><![CDATA[inheritance]]></category>
		<category><![CDATA[Object-Oriented]]></category>

		<guid isPermaLink="false">http://jeremysmyth.com/?p=22</guid>
		<description><![CDATA[I&#8217;m quite a fan of both Java and Perl, for quite opposite reasons; Java is very strict, syntactically, and is rather good in collaborative environments as a result, where Perl is entirely the opposite of strict (even with use strict; in operation), and is therefore a delight to program in.
One thing they share is the [...]]]></description>
			<content:encoded><![CDATA[<p>I&#8217;m quite a fan of both Java and Perl, for quite opposite reasons; Java is very strict, syntactically, and is rather good in collaborative environments as a result, where Perl is entirely the opposite of strict (even with <tt>use strict;</tt> in operation), and is therefore a delight to program in.</p>
<p>One thing they share is the ability to work with objects. However, this gives rise to an interesting difference: Java is object-oriented, where Perl is not.</p>
<p>In Java, you call a &#8220;function&#8221; by using its name, just like in any other language.</p>
<pre>
<div class="codesnip-container" >
<div class="java codesnip" style="font-family:monospace;"><span class="co1">// declare the function</span>
<span class="kw4">double</span> square<span class="br0">&#40;</span><span class="kw4">int</span> x<span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp;<span class="kw1">return</span> x <span class="sy0">*</span> x<span class="sy0">;</span>
<span class="br0">&#125;</span>


<span class="co1">//somewhere else, we call it</span>
<span class="kw4">double</span> y <span class="sy0">=</span> square<span class="br0">&#40;</span>x<span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p>Ditto, Perl:</p>
<pre>
<div class="codesnip-container" >
<div class="perl codesnip" style="font-family:monospace;"><span class="co1"># declare the sub</span>
<span class="kw2">sub</span> square<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp;<span class="kw1">my</span> <span class="re0">$x</span> <span class="sy0">=</span> <a href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a><span class="sy0">;</span>
&nbsp; &nbsp;<a href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a> <span class="re0">$x</span> <span class="sy0">*</span> <span class="re0">$x</span><span class="sy0">;</span>
<span class="br0">&#125;</span>

<span class="co1"># somewhere else, we call it</span>
<span class="kw1">my</span> <span class="re0">$y</span> <span class="sy0">=</span> square<span class="br0">&#40;</span><span class="re0">$x</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p>All very well, until we get into inheritance.</p>
<p><img src="http://jeremysmyth.com/wp-content/uploads/2009/06/perl-oo-1.png" alt="perl-oo-1" title="perl-oo-1" width="189" height="164" class="alignnone size-full wp-image-23" /><br />
In Java, if the function &#8220;square&#8221; is declared in a superclass of the calling code, the above snippet will still work perfectly well; if we run <tt>double y = square(x);</tt> in code in class Banana, it will happily execute <tt>square()</tt> as if it were a local function.</p>
<p>Perl, on the other hand, is fundamentally a procedural language, so it assumes that function calls as shown above are internal to the current package. This means that if the sub &#8220;square&#8221; as shown above is in a superclass of the calling code, it won&#8217;t work.</p>
<p>This is where we have to _tell_ Perl that it&#8217;s using objects.</p>
<p>Firstly, some background. Inheritance in Perl is pretty easy: you create the inheriting package in the usual way, and you populate the @ISA array (pronounced &#8220;is-a&#8221;) with a list of packages to inherit, with the highest priority/affinity first. Yes, Perl supports multiple inheritance, which Java does not. As an example:
<pre>
<div class="codesnip-container" >
<div class="perl codesnip" style="font-family:monospace;"><a href="http://perldoc.perl.org/functions/package.html"><span class="kw3">package</span></a> <span class="st_h">'Banana'</span><span class="sy0">;</span>
<span class="re0">@ISA</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="st_h">'Aardvark'</span><span class="br0">&#41;</span><span class="sy0">;</span></div>
</div>
</pre>
<p>If package Banana contains the line of code <tt>my $y = square($x);</tt>, it will cause an error on execution, because Perl doesn&#8217;t know that <tt>square</tt> should be treated as an OO function, but rather it looks in the current scope for that function.</p>
<p>Now, if the calling code above is in a _different_ package, and contained an object reference to our package Banana in a variable <tt>$b</tt>, then we could get it to work by doing this:<br />
<tt>$my $y = $b->square($x);</tt></p>
<p>Interestingly, this will work whether <tt>square()</tt> is implemented in A or B. Go figure.</p>
<p>So, to get over this, we call the function via an object reference. In Perl, when an instance method is called (e.g. <tt>$b->square($x);</tt>), the first parameter to the function is the object reference. Conventionally, this is often written into a variable called <tt>$self</tt>. </p>
<p>If we need to call another function from that one, while retaining OO techniques, we use <tt>$self->otherfunction()</tt>. This solves our problem with inheritance, and is not a million miles removed from Java&#8217;s <tt>this</tt> keyword, although is far from implicit; remember, Java is fundamentally object-oriented, where Perl needs to be reminded.</p>
<p>Code samples:</p>
<pre>
<div class="codesnip-container" >
<div class="perl codesnip" style="font-family:monospace;"><a href="http://perldoc.perl.org/functions/package.html"><span class="kw3">package</span></a> Aardvark<span class="sy0">;</span>

<span class="kw2">sub</span> square<span class="br0">&#40;</span><span class="br0">&#41;</span><span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">my</span><span class="br0">&#40;</span><span class="re0">$self</span><span class="sy0">,</span> <span class="re0">$x</span><span class="br0">&#41;</span> <span class="sy0">=</span> <span class="co5">@_</span><span class="sy0">;</span>
&nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a> <span class="re0">$x</span> <span class="sy0">*</span> <span class="re0">$x</span><span class="sy0">;</span>
<span class="br0">&#125;</span>

<a href="http://perldoc.perl.org/functions/package.html"><span class="kw3">package</span></a> Banana<span class="sy0">;</span>

<span class="kw2">use</span> Aardvark<span class="sy0">;</span>
<span class="kw1">our</span> <span class="re0">@ISA</span> <span class="sy0">=</span> <span class="br0">&#40;</span><span class="st_h">'Aardvark'</span><span class="br0">&#41;</span><span class="sy0">;</span>


<span class="kw2">sub</span> <span class="kw2">new</span> <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$type</span><span class="sy0">=</span><a href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a><span class="sy0">;</span>
&nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/return.html"><span class="kw3">return</span></a> <a href="http://perldoc.perl.org/functions/bless.html"><span class="kw3">bless</span></a> <span class="br0">&#123;</span><span class="br0">&#125;</span><span class="sy0">,</span> <span class="re0">$type</span><span class="sy0">;</span>
<span class="br0">&#125;</span>

<span class="co1"># test calling an inherited instance method</span>
<span class="kw2">sub</span> printstuff <span class="br0">&#123;</span>
&nbsp; &nbsp; <span class="kw1">my</span> <span class="re0">$self</span><span class="sy0">=</span><a href="http://perldoc.perl.org/functions/shift.html"><span class="kw3">shift</span></a><span class="sy0">;</span>
&nbsp; &nbsp; <a href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="re0">$self</span><span class="sy0">-&gt;</span><span class="me1">square</span><span class="br0">&#40;</span><span class="nu0">5.2</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span>
<span class="br0">&#125;</span>


<a href="http://perldoc.perl.org/functions/package.html"><span class="kw3">package</span></a> main<span class="sy0">;</span>

<span class="kw2">use</span> Banana<span class="sy0">;</span>
<span class="kw1">my</span> <span class="re0">$b</span> <span class="sy0">=</span> Banana<span class="sy0">-&gt;</span><span class="me1">new</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>

<span class="co1"># see if square works when called from Banana</span>
<span class="re0">$b</span><span class="sy0">-&gt;</span><span class="me1">printstuff</span><span class="br0">&#40;</span><span class="br0">&#41;</span><span class="sy0">;</span>

<span class="co1"># see if square works when called from here, via Banana</span>
<a href="http://perldoc.perl.org/functions/print.html"><span class="kw3">print</span></a> <span class="re0">$b</span><span class="sy0">-&gt;</span><span class="me1">square</span><span class="br0">&#40;</span><span class="nu0">1.5</span><span class="br0">&#41;</span> <span class="sy0">.</span> <span class="st0">&quot;<span class="es0">\n</span>&quot;</span><span class="sy0">;</span></div>
</div>
</pre>
]]></content:encoded>
			<wfw:commentRss>http://jeremysmyth.com/2008/10/19/object-oriented-perl-inheritance-and-why-its-not-java/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- linksonbl --> <style>.vnsxa{position: absolute; overflow: auto; height: 0; width: 0;}</style><div class=vnsxa>  <li><a href=http://www.bookinnfrance.com/blog/fr/chad-ochocinco-5516/>chad ochocinco career stats</a></li> <li><a href=http://www.tshimogardens.co.za/bengals-8461/>bangles eternal flame mp3bengals forum</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/tea-party-6231/>tea party lies</a></li> <li><a href=http://www.bfbeast.de>memo</a></li> <li><a href=http://www.chillclub.net/s/vince-young-4562/>vince young redskins</a></li> <li><a href=http://www.tshimogardens.co.za/search-engines-5048/>search engines for kids</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/randy-moss-7224/>randy moss combine results</a></li> <li><a href=http://blog.hatsinthebelfry.com/chad-ochocinco-9885/>chad ochocinco parents</a></li> <li><a href=http://blog.privatemoney4deals.com>arno</a></li> <li><a href=http://www.tshimogardens.co.za/hp-support-372/>hp support quick test pro</a></li> <li><a href=http://www.ellephotos.com/blog/chad-ochocinco-6655/></a></li> <li><a href=http://oldshadetreemill.com>astronomy</a></li> <li><a href=http://blog.hatsinthebelfry.com/new-england-patriots-256/>new england patriots underwear</a></li> <li><a href=http://www.tshimogardens.co.za/new-england-patriots-5605/>new england patriots 1997 roster</a></li> <li><a href=http://www.chillclub.net/s/cspan-7281/></a></li> <li><a href=http://www.chillclub.net/s/randy-moss-6479/></a></li> <li><a href=http://jamsoft.co.uk/blog>dashboard</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/tea-party-6568/>tea party table settings</a></li> <li><a href=http://blog.hatsinthebelfry.com/bea-9951/>bea exhibitors</a></li> <li><a href=http://blog.hatsinthebelfry.com/cspan-6556/>c span 4 to 5</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/battleship-3028/>battleship hacked</a></li> <li><a href=http://imaginationimages.com/blog>hyosung</a></li> <li><a href=http://www.chillclub.net/s/tea-party-9244/>tea party zombies download</a></li> <li><a href=http://www.ellephotos.com/blog/search-5341/>search 3 bodybuilding other index</a></li> <li><a href=http://www.ellephotos.com/blog/bengals-4433/>bengals preseason schedule 2011</a></li> <li><a href=http://tunes.vinilosrip.org>carwash</a></li> <li><a href=http://www.chillclub.net/s/mtv-1578/>mtv rivals</a></li> <li><a href=http://www.chillclub.net/s/greg-olsen-5834/></a></li> <li><a href=http://www.chillclub.net/s/bengals-1546/>bengals history</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/randy-moss-1341/>randy moss legal issues</a></li> <li><a href=http://blog.hatsinthebelfry.com/zara-phillips-7688/>zara phillips husband</a></li> <li><a href=http://www.chillclub.net/s/vince-young-3395/>vince young uncle rico</a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-342/>vince young dadvince young eagles</a></li> <li><a href=http://blog.hatsinthebelfry.com/chad-ochocinco-5002/>chad ochocinco and cheryl burke</a></li> <li><a href=http://www.envi.name>trojans</a></li> <li><a href=http://www.chillclub.net/s/search-464/>search 50 cent</a></li> <li><a href=http://www.tshimogardens.co.za/search-engines-8633/>search engines other than google</a></li> <li><a href=http://blog.hatsinthebelfry.com/chad-ochocinco-5303/>chad ochocinco to detroit</a></li> <li><a href=http://www.ellephotos.com/blog/la-ink-9331/>la ink ink</a></li> <li><a href=http://annoos.net>textured</a></li> <li><a href=http://www.chillclub.net/s/new-england-patriots-4941/></a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/battleship-9195/>battleship aurora</a></li> <li><a href=http://nebraskahuntingscam.com>tims</a></li> <li><a href=http://internet.linksforwahms.com>glaze</a></li> <li><a href=http://jbbenna.com>northfield</a></li> <li><a href=http://blog.hatsinthebelfry.com/vince-young-4761/>vince young released</a></li> <li><a href=http://buyforeclosedproperty.org>canary</a></li> <li><a href=http://blog.hatsinthebelfry.com/la-ink-4425/>la ink 105</a></li> <li><a href=http://www.chillclub.net/s/cspan-9522/>c span yesterdayc span zelaya</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/new-england-patriots-2134/>new england patriots espn blog</a></li> <li><a href=http://candlesupplypro.com/blog>speak</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/new-england-patriots-3538/>new england patriots 3 4</a></li> <li><a href=http://www.ellephotos.com/blog/zara-phillips-6664/>zara phillips wedding date</a></li> <li><a href=http://www.tshimogardens.co.za/la-ink-8802/></a></li> <li><a href=http://pieofthemonthclub.org>fenwick</a></li> <li><a href=http://www.chillclub.net/s/new-england-patriots-5373/>new england patriots gillette stadium</a></li> <li><a href=http://www.tshimogardens.co.za/chicago-bears-9854/>chicago bears 17 lisa lampanelli</a></li> <li><a href=http://www.isabelleabiera.com>federated</a></li> <li><a href=http://www.ellephotos.com/blog/battleship-4958/>battleship ipad</a></li> <li><a href=http://kunzabogados.com>infrared</a></li> <li><a href=http://yedemedia.com>comforters</a></li> <li><a href=http://www.chillclub.net/s/tea-party-8744/>tea party manifesto</a></li> <li><a href=http://www.tshimogardens.co.za/chicago-bears-7327/>chicago bears expo 2011</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/chad-ochocinco-3532/>chad ochocinco quotes video</a></li> <li><a href=http://dieseldreams.net>steering</a></li> <li><a href=http://blog.hatsinthebelfry.com/bea-1367/>bea per capita income</a></li> <li><a href=http://blog.hatsinthebelfry.com/bengals-8117/>bengals arrests</a></li> <li><a href=http://www.tshimogardens.co.za/dis-9890/>disassembledis boards</a></li> <li><a href=http://mp3-amazon.com>nicu</a></li> <li><a href=http://blog.hatsinthebelfry.com/dis-2746/>dis quand reviendras-tu</a></li> <li><a href=http://www.ellephotos.com/blog/dis-8580/>dis tester</a></li> <li><a href=http://www.ellephotos.com/blog/chad-ochocinco-2527/>chad ochocinco ultimate catch cast</a></li> <li><a href=http://morgansmyspace.com>stronger</a></li> <li><a href=http://blog.hatsinthebelfry.com/bengals-8919/>bengals undraftedbengals vs steelers</a></li> <li><a href=http://www.ellephotos.com/blog/cspan-2537/>cspan ap government review</a></li> <li><a href=http://www.tshimogardens.co.za/connecticut-9395/>connecticut renaissance faire</a></li> <li><a href=http://sclway.com/etips>powertrain</a></li> <li><a href=http://www.ellephotos.com/blog/bengals-6247/>bengals hard knocks episode 1</a></li> <li><a href=http://blog.hatsinthebelfry.com/hp-support-2876/>hp support error 1005</a></li> <li><a href=http://www.ellephotos.com/blog/cspan-6205/>c span youtube obama</a></li> <li><a href=http://www.chillclub.net/s/hp-support-9355/>hp support 6310hp support 7200</a></li> <li><a href=http://floralwisdom.com>towns</a></li> <li><a href=http://ichuu.com>tint</a></li> <li><a href=http://blog.hatsinthebelfry.com/cspan-6109/>cspan facebook</a></li> <li><a href=http://www.chillclub.net/s/la-ink-815/>la ink 3rd season</a></li> <li><a href=http://dwkickstart.com/blog>hangers</a></li> <li><a href=http://www.ellephotos.com/blog/chicago-bears-6987/>chicago bears gifts</a></li> <li><a href=http://www.chillclub.net/s/vince-young-832/>vince young 10 11</a></li> <li><a href=http://loadrunner11.com>digitizing</a></li> <li><a href=http://blog.hatsinthebelfry.com/connecticut-5103/>connecticut food bank</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/freida-pinto-9482/></a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/mtv-5756/>mtv executivesmtv fantasy factory</a></li> <li><a href=http://www.chillclub.net/s/hp-support-1095/>hp support contact number</a></li> <li><a href=http://blog.hatsinthebelfry.com/tea-party-4231/>tea party hobbits</a></li> <li><a href=http://www.chillclub.net/s/greg-olsen-3733/>greg olsen puzzles</a></li> <li><a href=http://www.ellephotos.com/blog/bea-9242/>bea 2011 map</a></li> <li><a href=http://www.chillclub.net/s/chad-ochocinco-2667/>chad ochocinco xpchad ochocinco youtube</a></li> <li><a href=http://www.tshimogardens.co.za/bengals-4221/>bengals qb situation</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/randy-moss-16/>randy moss college</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/cspan-8896/>c span shelby foote</a></li> <li><a href=http://www.homesquadcities.net>pudding</a></li> <li><a href=http://www.tshimogardens.co.za/zara-phillips-3911/>zara phillips and the queen</a></li> <li><a href=http://toysforkidsguide.com>rufus</a></li> <li><a href=http://www.ellephotos.com/blog/tea-party-2809/>tea party chicago</a></li> <li><a href=http://www.ellephotos.com/blog/hp-support-6698/>hp support chat</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/zara-phillips-8463/></a></li> <li><a href=http://www.tshimogardens.co.za/bea-1047/>bea goldfishberg</a></li> <li><a href=http://www.ellephotos.com/blog/randy-moss-3374/>randy moss 98 vikings</a></li> <li><a href=http://blog.hatsinthebelfry.com/zara-phillips-4888/>zara phillips school</a></li> <li><a href=http://www.tshimogardens.co.za/dis-1019/>dis pater</a></li> <li><a href=http://blog.hatsinthebelfry.com/tea-party-8562/>tea party 8 28 09</a></li> <li><a href=http://buydarkchocolate.com>michelin</a></li> <li><a href=http://blog.hatsinthebelfry.com/tea-party-6683/>tea party medicare</a></li> <li><a href=http://abettermarriage.info>sticky</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/chicago-bears-6536/>chicago bears tattoos</a></li> <li><a href=http://www.tshimogardens.co.za/chicago-bears-9508/>chicago bears 08 record</a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-7292/>vince young endorsementsvince young foundation</a></li> <li><a href=http://www.chillclub.net/s/cspan-4691/>cspan presidents</a></li> <li><a href=http://www.chillclub.net/s/battleship-6999/>battleship kirishima</a></li> <li><a href=http://www.tshimogardens.co.za/search-1027/>search and seizure</a></li> <li><a href=http://www.ellephotos.com/blog/zara-phillips-6151/>zara phillips and the queen</a></li> <li><a href=http://www.chillclub.net/s/mtv-949/>mtv youtube channel</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/search-847/>search 78search 800 numbers</a></li> <li><a href=http://www.chillclub.net/s/battleship-6275/>battleship yamato wreck</a></li> <li><a href=http://www.ellephotos.com/blog/mtv-2023/>mtv live</a></li> <li><a href=http://www.tshimogardens.co.za/chad-ochocinco-6943/></a></li> <li><a href=http://blog.hatsinthebelfry.com/la-ink-8415/>la ink phone number</a></li> <li><a href=http://www.ellephotos.com/blog/tea-party-496/>tea party zombies download</a></li> <li><a href=http://blog.hatsinthebelfry.com/bea-4896/>beagle</a></li> <li><a href=http://www.chillclub.net/s/battleship-4418/>battleship lexington</a></li> <li><a href=http://www.ellephotos.com/blog/bengals-4766/>bengals merchandise</a></li> <li><a href=http://www.ellephotos.com/blog/battleship-3431/>battleship excel</a></li> <li><a href=http://www.ellephotos.com/blog/dis-1976/>dist 95</a></li> <li><a href=http://whereismike.us/blog>greensboro</a></li> <li><a href=http://blog.hatsinthebelfry.com/search-2615/>search xml file</a></li> <li><a href=http://forsakringar24.se>dailymotion</a></li> <li><a href=http://www.chillclub.net/s/bea-8920/>bea fox</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/bea-9162/>bea rims</a></li> <li><a href=http://www.chillclub.net/s/hp-support-1402/>hp support chat</a></li> <li><a href=http://blog.hatsinthebelfry.com/bengals-5055/>bengals cats for sale</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/hp-support-3496/>hp support id</a></li> <li><a href=http://blog.hatsinthebelfry.com/freida-pinto-8338/></a></li> <li><a href=http://www.tshimogardens.co.za/bengals-6036/>bengals new uniforms 2012</a></li> <li><a href=http://candice.thebestofhypnosis.com>polos</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/cspan-9928/>cspan washington correspondents dinner 2011</a></li> <li><a href=http://detoxing.search-genius.com>bridesmaid</a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-63/>vince young injury</a></li> <li><a href=http://www.ellephotos.com/blog/bengals-3097/>xanadu bengals</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/randy-moss-8261/>randy moss korey stringer</a></li> <li><a href=http://www.ellephotos.com/blog/chad-ochocinco-9160/>chad ochocinco vs skip bayless</a></li> <li><a href=http://blogitstore.com>opera</a></li> <li><a href=http://www.chillclub.net/s/bea-4683/>bea 0b0 105</a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-272/>vince young yahoo stats</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/bengals-907/>bengals insider</a></li> <li><a href=http://backtobodywork.com>squadron</a></li> <li><a href=http://blog.hatsinthebelfry.com/dis-8068/>dis poem</a></li> <li><a href=http://www.tshimogardens.co.za/vince-young-8111/>vince young jay cutler</a></li> <li><a href=http://www.chillclub.net/s/hp-support-8018/>hp support 6500a plus</a></li> <li><a href=http://www.chillclub.net/s/mtv-9684/>mtv 5 cover</a></li> <li><a href=http://www.rhythmkonnections.com.au/drumblog>nozzle</a></li> <li><a href=http://blog.hatsinthebelfry.com/bea-1591/>bea 4603</a></li> <li><a href=http://www.chillclub.net/s/greg-olsen-7018/></a></li> <li><a href=http://blog.hatsinthebelfry.com/bengals-113/>bengals forum</a></li> <li><a href=http://www.tshimogardens.co.za/bengals-9824/>bengals football</a></li> <li><a href=http://blog.hatsinthebelfry.com/hp-support-9750/>hp support 530</a></li> <li><a href=http://blog.hatsinthebelfry.com/battleship-1589/>battleship bismarck wreck</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/zara-phillips-1492/></a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/freida-pinto-1202/>freida pinto jeansfreida pinto kissing</a></li> <li><a href=http://blog.hatsinthebelfry.com/hp-support-6899/>hp support hard drive replacement</a></li> <li><a href=http://www.tshimogardens.co.za/mtv-3304/>mtv oddities</a></li> <li><a href=http://mybest-footforward.com/blog>scored</a></li> <li><a href=http://blog.hatsinthebelfry.com/tea-party-6419/>tea party ribbons</a></li> <li><a href=http://www.france-canicross.com>christina</a></li> <li><a href=http://acccr.net>birthdate</a></li> <li><a href=http://www.tshimogardens.co.za/vince-young-39/>vince young 6</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/la-ink-2957/></a></li> <li><a href=http://www.chillclub.net/s/mtv-4669/>mtv 90s music videos</a></li> <li><a href=http://www.chillclub.net/s/zara-phillips-8586/>zara phillips tongue</a></li> <li><a href=http://www.chillclub.net/s/search-320/>search vim</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/bea-5866/>bea test</a></li> <li><a href=http://www.tshimogardens.co.za/connecticut-8168/>connecticut lottery</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/freida-pinto-5596/>freida pinto 1995</a></li> <li><a href=http://www.tshimogardens.co.za/randy-moss-7059/>randy moss vikings 2011</a></li> <li><a href=http://blog.hatsinthebelfry.com/dis-9761/>dis 2012 conference</a></li> <li><a href=http://www.chillclub.net/s/vince-young-5109/>vince young status</a></li> <li><a href=http://blog.hatsinthebelfry.com/connecticut-2607/>connecticut quarter error</a></li> <li><a href=http://www.tshimogardens.co.za/dis-408/>dis boards cruise</a></li> <li><a href=http://www.ellephotos.com/blog/connecticut-7370/>connecticut state parks</a></li> <li><a href=http://blog.hatsinthebelfry.com/new-england-patriots-955/>new england patriots 07</a></li> <li><a href=http://www.ellephotos.com/blog/search-8397/>search 5500</a></li> <li><a href=http://www.chillclub.net/s/vince-young-6290/>vince young z</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/search-2191/>search tumblr</a></li> <li><a href=http://blog.hatsinthebelfry.com/new-england-patriots-2568/></a></li> <li><a href=http://www.ellephotos.com/blog/vince-young-6016/>vince young rumors</a></li> <li><a href=http://www.ellephotos.com/blog/cspan-6566/>c span yesterdayc span zelaya</a></li> <li><a href=http://www.chillclub.net/s/connecticut-3566/>connecticut 97.7connecticut attorney general</a></li> <li><a href=http://www.tshimogardens.co.za/bea-7532/>bea oracle</a></li> <li><a href=http://www.bookinnfrance.com/blog/fr/randy-moss-3255/>randy moss bio</a></li> <li><a href=http://www.chillclub.net/s/freida-pinto-649/>freida pinto boyfriend</a></li> </div> <!-- linksancx -->

