<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:blogger="http://schemas.google.com/blogger/2008" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr="http://purl.org/syndication/thread/1.0" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;DUUGRn8zfyp7ImA9WhBUGU0.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235</id><updated>2013-05-07T08:13:47.187+02:00</updated><category term="ActivePerl" /><category term="Twitter" /><category term="NotepadPlusPlus" /><category term="SZABGAB" /><category term="wxPerl" /><category term="RankSearch" /><category term="programming" /><category term="Perl documentation" /><category term="Larry Wall" /><category term="Perl" /><category term="Windows" /><category term="book" /><category term="general" /><category term="Perl Iron Man" /><category term="Google" /><category term="Open Source" /><category term="Testing" /><category term="DOS commands" /><category term="Strawberry Perl" /><category term="Damien Conway" /><category term="Hosting" /><category term="Padre" /><category term="Perl Foundation" /><category term="SEO" /><category term="chromatic" /><category term="Perl news" /><category term="Perl personalities" /><category term="Linux" /><category term="edX" /><category term="html" /><category term="perldoc" /><category term="MMORPG" /><category term="Perl6" /><category term="Project Euler" /><category term="brian d foy" /><category term="Google AI Challenge" /><category term="blogging" /><category term="Modern Perl" /><category term="learning" /><category term="POD" /><category term="Magic" /><category term="CPAN" /><category term="Perl tools" /><title>Damien Learns Programming</title><subtitle type="html">There is always one more thing to learn...</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://damienlearnsperl.blogspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>58</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/atom+xml" href="http://feeds.feedburner.com/DamienLearnsPerl" /><feedburner:info uri="damienlearnsperl" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><entry gd:etag="W/&quot;Ak8CRnY5fip7ImA9WhJWFU8.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-1031727209523241582</id><published>2012-08-18T09:51:00.000+02:00</published><updated>2012-08-21T08:01:07.826+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-21T08:01:07.826+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="learning" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="edX" /><title>edX: College-quality computer science education</title><content type="html">&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;A soft &amp;nbsp;drum roll can be heard throughout the realm. It slowly grows louder as a herald appears on your screen.&amp;nbsp;&lt;/i&gt;&lt;i&gt;The Announcer sounds her trumpet, clears her throat. Drums stop and she exclaims:&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&amp;nbsp; &amp;nbsp; - "The blog heretofore known as 'Damien Learns Perl' is now to be referred to as 'Damien Learns Programming'. This broader title means greater variety and more life (or so it is hoped)&amp;nbsp;to the speculations and musings of an eternal student of computer programming."&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;Crowd cheers.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;i&gt;&amp;nbsp; &amp;nbsp; - &lt;/i&gt;"No camel was hurt in this process. Go home and spread the good word."&lt;br /&gt;
&lt;br /&gt;
&lt;i&gt;The herald lets out a content sigh then disappears in a puff.&lt;/i&gt;&lt;br /&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;
&lt;br /&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;-------&lt;/i&gt;&lt;/div&gt;
&lt;div style="text-align: center;"&gt;
&lt;i&gt;&lt;br /&gt;&lt;/i&gt;&lt;/div&gt;
I feel like writing about other topics than just Perl. I contemplated starting a new blog for a few seconds but it made more sense to give a new direction to this site.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;b&gt;Evolve or become irrelevant&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
This could be the motto of the computing/computer science/IT industry.&lt;br /&gt;
Tools keep popping out of thin air, new programming languages are invented, operating systems evolve rapidly, new devices appear that can be programmed, etc.&lt;br /&gt;
Those changes answer people's ever demanding requests.&lt;br /&gt;
&lt;br /&gt;
You want to keep up but how to go about updating your skills?&lt;br /&gt;
&lt;br /&gt;
The best motivator is to build something that you need. When my wife became pregnant, I started to build a "Baby Tracker" app to learn C++ and to keep tab on the baby's vaccination schedule, teeth growth, stool color, etc. I eventually abandoned the project because (believe it or not) taking actual care of my first daughter became a higher priority. By the time I had bandwidth again, the "baby tracker" need was moot.&lt;br /&gt;
Having a purpose makes you want to keep learning and carry on after you have hit a few too many obstacles.&lt;br /&gt;
&lt;br /&gt;
This self-learning path resembles an obstacle course: the end line is visible but you first have to jump over all those hurdles to attain it.&lt;br /&gt;
&lt;br /&gt;
Another way to learn new skills is through online education. Several sites already exist that put emphasis on learning in a fun way:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="http://www.codecademy.com/" target="_blank"&gt;Codecademy&lt;/a&gt;&amp;nbsp;(for beginning web programmers)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.khanacademy.org/" target="_blank"&gt;Khan Academy&lt;/a&gt; (originally created to teach mathematics but now proposing many subjects, including computer science)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://www.memrise.com/" target="_blank"&gt;Memrise&lt;/a&gt;&amp;nbsp;(to help you learn vocabulary for new languages, including programming languages)&lt;/li&gt;
&lt;li&gt;&lt;a href="http://learncodethehardway.org/" target="_blank"&gt;LCodeTHW&lt;/a&gt; (despite its name, offers a great way to start learning about programming)&lt;/li&gt;
&lt;li&gt;etc.&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
Those are quality sites and I encourage you to visit them if you are looking for a first acquaintance with a new topic.&lt;/div&gt;
&lt;div&gt;
However, I want to share here something that I am truly excited about: online computer science college-quality education for free. Back in 2000 I got involved in the &lt;a href="http://www.peoi.org/" target="_blank"&gt;PEOI project&lt;/a&gt;&amp;nbsp;whose mission was to bring professional education online to the masses (provided access to an internet link). The site still exists but the design has not evolved since its creation and course content was created by volunteers. Its noble goal though has found a champion today: &lt;a href="https://www.edx.org/courses" target="_blank"&gt;edX&lt;/a&gt;.&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;b&gt;Get a quality education&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
edX is a joint online interactive educational project from MIT, Berkeley and Harvard University, some of the best US universities. You can earn certificates along with knowledge. New classes are about to start this fall and include:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.edx.org/courses/MITx/6.00x/2012_Fall/about" target="_blank"&gt;Introduction to Computer Science and Programming&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.edx.org/courses/HarvardX/CS50x/2012/about" target="_blank"&gt;Introduction to Computer Science I&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.edx.org/courses/BerkeleyX/CS169.1x/2012_Fall/about" target="_blank"&gt;Software as a Service (SaaS)&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.edx.org/courses/BerkeleyX/CS188.1x/2012_Fall/about" target="_blank"&gt;Artificial Intelligence&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
There is no selection, all classes are open to anyone with an internet access.&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
So go forth and upgrade your computing education.&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
Evolve and ride the relevance wave!&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=5jlFRUwW3GE:VDt1Fkjg5xk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=5jlFRUwW3GE:VDt1Fkjg5xk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=5jlFRUwW3GE:VDt1Fkjg5xk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=5jlFRUwW3GE:VDt1Fkjg5xk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=5jlFRUwW3GE:VDt1Fkjg5xk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=5jlFRUwW3GE:VDt1Fkjg5xk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/5jlFRUwW3GE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/1031727209523241582/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2012/08/college-quality-computer-science.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1031727209523241582?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1031727209523241582?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/5jlFRUwW3GE/college-quality-computer-science.html" title="edX: College-quality computer science education" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2012/08/college-quality-computer-science.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UGR386cSp7ImA9WhJSEUk.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-8125834250730603988</id><published>2012-07-01T15:27:00.000+02:00</published><updated>2012-07-01T15:27:06.119+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-07-01T15:27:06.119+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Open Source" /><category scheme="http://www.blogger.com/atom/ns#" term="general" /><category scheme="http://www.blogger.com/atom/ns#" term="book" /><title>Rebel Code</title><content type="html">I just finished reading &lt;a href="http://www.amazon.com/Rebel-Code-Linux-Source-Revolution/dp/0738206709" target="_blank"&gt;"Rebel Code" by Glyn Moody&lt;/a&gt; and I really enjoyed it so here's a short review.&lt;br /&gt;
"Rebel Code" is an older book which relates the story of high profile &lt;a href="http://www.opensource.org/" target="_blank"&gt;Open Source&lt;/a&gt; projects from the beginning of the free software movement up until 2001.&lt;br /&gt;
I picked it up at a local Atlanta library and I had little idea about what I was going to find inside. I saw that it talked about the story of &lt;a href="http://www.gnu.org/gnu/linux-and-gnu.html" target="_blank"&gt;GNU/Linux&lt;/a&gt; and that was enough to arouse my curiosity.&lt;br /&gt;
&lt;a href="http://linux.slashdot.org/story/01/01/29/2037257/rebel-code" target="_blank"&gt;The book&lt;/a&gt; is a great read for those wanting a short history of Open Source development. The author did a good job transitioning between various stories (The Free Software Foundation, Linux, Perl, etc.) and the result is a fun and instructive read. I finished it in 4 days.&lt;br /&gt;
It makes me want to read an hypothetical volume two that would span from 2001 up to the present day.&lt;br /&gt;
&lt;br /&gt;
I highly recommend "Rebel Code - Inside Linux and the Open Source revolution" to all those who want to learn about the mythical free software coding feats, all the way from Richard Stallman's and Linus Torvald's first works.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=TdF38a6XUJk:nAnOJTN7560:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=TdF38a6XUJk:nAnOJTN7560:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=TdF38a6XUJk:nAnOJTN7560:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=TdF38a6XUJk:nAnOJTN7560:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=TdF38a6XUJk:nAnOJTN7560:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=TdF38a6XUJk:nAnOJTN7560:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/TdF38a6XUJk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/8125834250730603988/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2012/07/rebel-code.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/8125834250730603988?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/8125834250730603988?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/TdF38a6XUJk/rebel-code.html" title="Rebel Code" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2012/07/rebel-code.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEEBQHw9eCp7ImA9WhdaGUo.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-4497094918530765873</id><published>2011-10-29T16:10:00.007+02:00</published><updated>2011-10-30T12:04:11.260+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-30T12:04:11.260+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Google AI Challenge" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>Google AI Challenge, Fall 2011 edition</title><content type="html">It is this time of the year again. Google has set up its &lt;a href="http://aichallenge.org/index.php"&gt;Fall 2011 Artificial Intelligence (AI) challenge&lt;/a&gt;.&lt;div&gt;The goal is to protect your ant hill and gather food while destroying the enemy's hills.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;There are &lt;a href="http://aichallenge.org/starter_packages.php"&gt;starter packages for 25 languages&lt;/a&gt;, including Perl, for Windows and Linux environments.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;The contest closes on December 18th. Submit your best efforts to move Perl up the rankings!&lt;/div&gt;&lt;div&gt;Here is &lt;a href="http://aichallenge.org/language_profile.php?language=Perl"&gt;the ranking table for Perl&lt;/a&gt;, there were 35 entries at the moment this post was written with a best position of 198th by grand_sbor.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=4uwlnLc6CIs:XXA4eD3UudM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=4uwlnLc6CIs:XXA4eD3UudM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=4uwlnLc6CIs:XXA4eD3UudM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=4uwlnLc6CIs:XXA4eD3UudM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=4uwlnLc6CIs:XXA4eD3UudM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=4uwlnLc6CIs:XXA4eD3UudM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/4uwlnLc6CIs" height="1" width="1"/&gt;</content><link rel="related" href="http://aichallenge.org/index.php" title="Google AI Challenge, Fall 2011 edition" /><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/4497094918530765873/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2011/10/google-ai-challenge-fall-2011-edition.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4497094918530765873?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4497094918530765873?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/4uwlnLc6CIs/google-ai-challenge-fall-2011-edition.html" title="Google AI Challenge, Fall 2011 edition" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2011/10/google-ai-challenge-fall-2011-edition.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4ESHk7cCp7ImA9WhdaFUo.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-2994146103765927785</id><published>2011-10-25T10:55:00.006+02:00</published><updated>2011-10-25T23:08:29.708+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-25T23:08:29.708+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SZABGAB" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl news" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl personalities" /><title>The Perl Weekly newsletter</title><content type="html">&lt;div&gt;&lt;span class="Apple-style-span"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;When it comes to getting fresh Perl news, the community provides &lt;a href="http://blogs.perl.org/users/gabor_szabo/2011/10/why-and-how-to-promote-the-perl-weekly-newsletter.html"&gt;many resources&lt;/a&gt;.&lt;br /&gt;It can be time consuming to sift through all of them and there is always the chance that you will miss interesting tidbits about your favorite scripting language.&lt;br /&gt;&lt;br /&gt;Lo and behold, Gabor Szabo (&lt;a href="http://szabgab.com/"&gt;szabgab&lt;/a&gt;) comes to your rescue. His &lt;a href="http://perlweekly.com/"&gt;weekly Perl Weekly newsletter&lt;/a&gt; is an aggregate of all the recent happenings in the world of Perl programming. He is doing a great job of extracting the big news for us in order to save time to everyone.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span"&gt;You can read the newsletter on the web or subscribe to receive it in your mailbox. 13 issues are out already!&lt;br /&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span class="Apple-style-span"&gt;&lt;b&gt;&lt;a href="http://www.youtube.com/user/gabor529"&gt;The Perl Channel&lt;/a&gt;&lt;/b&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Gabor has been keeping himself busy recently, having the courage to stand in front of the spotlights. A few months ago, he started a &lt;a href="http://www.youtube.com/user/gabor529"&gt;series of Perl videos on YouTube&lt;/a&gt;. There are, as of the end of October 2011, 25 segments of about 15 minutes.&lt;/div&gt;&lt;div&gt;If you are starting development of Perl programs on Windows, this is another great resource for learning. There are beginner lessons, Padre tutorials, Perl 6 videos and more.&lt;/div&gt;&lt;div&gt;If you prefer your information presented by a live person (as opposed to read from a document), I recommend that you check it out now. Even better, watch it on your phone during your commute (WARNING: do not drive and Perl at the same time!).&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=L4VsIOR9S9s:V7EuBH2e-MI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=L4VsIOR9S9s:V7EuBH2e-MI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=L4VsIOR9S9s:V7EuBH2e-MI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=L4VsIOR9S9s:V7EuBH2e-MI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=L4VsIOR9S9s:V7EuBH2e-MI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=L4VsIOR9S9s:V7EuBH2e-MI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/L4VsIOR9S9s" height="1" width="1"/&gt;</content><link rel="related" href="http://perlweekly.com/" title="The Perl Weekly newsletter" /><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/2994146103765927785/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2011/10/perl-weekly-newsletter.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/2994146103765927785?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/2994146103765927785?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/L4VsIOR9S9s/perl-weekly-newsletter.html" title="The Perl Weekly newsletter" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2011/10/perl-weekly-newsletter.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YGRH44eCp7ImA9WhdQFE8.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-4647188225292684121</id><published>2011-06-19T08:49:00.018+02:00</published><updated>2011-08-15T18:18:45.030+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-08-15T18:18:45.030+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="SZABGAB" /><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><title>CPAN tester</title><content type="html">&lt;a href="https://twitter.com/#%21/szabgab"&gt;Tweets from Gabor Szabo&lt;/a&gt; got me curious about CPAN tests.
&lt;br /&gt;I work in software testing and I recognize the value of automatic tests and reports.
&lt;br /&gt;After checking out the &lt;a href="http://wiki.cpantesters.org/"&gt;CPAN Tester wiki&lt;/a&gt;, I installed and configured CPAN::Reporter. If I understand well, this module will automatically send the test results run on your computer to the CPAN test database when you install a new Perl module. The authors and users can see reports on all tested configurations.
&lt;br /&gt;This is a simple way to give back to the Perl community for those nice &lt;a href="http://search.cpan.org/"&gt;CPAN modules&lt;/a&gt;.
&lt;br /&gt;
&lt;br /&gt;The &lt;a href="http://wiki.cpantesters.org/wiki/TestDuringInstall&amp;amp;version=16"&gt;process involved &lt;/a&gt;starts with installing the CPAN::Reporter module on your machine and saving the configuration file.
&lt;br /&gt;&lt;span style="font-style:italic;"&gt;Note: When looking for the metabase-profile tool on Windows, check in the C:\Perl\cpan\build\Metabase-Fact-0.019\script directory.
&lt;br /&gt;&lt;/span&gt;
&lt;br /&gt;You can also set up a machine to continuously test CPAN Perl modules.
&lt;br /&gt;
&lt;br /&gt;Each tester registered to the CPAN gets listed according to the number of test reports sent back to the server. Gabor is making a game of climbing the ranks. Who will join the testers' army and try to beat him?
&lt;br /&gt;
&lt;br /&gt;Edit June 22nd: As of now, I am registered on CPAN testers and have sent my first test report. You can check that your setup is correct by searching through the &lt;a href="http://metabase.cpantesters.org/tail/log.txt"&gt;log tail&lt;/a&gt;. Here's my entry:
&lt;br /&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="font-family: courier new;"&gt;22T07:21:29Z] [dlp] [pass] [DAGOLDEN/CPAN-Reporter-1.1902.tar.gz] [MSWin32-x86-multi-thread] [perl-v5.10.1] [ddfed1a4-6e1e-1014-9872-6ddfc9b97d9d] [2011-06-22T07:21:29Z]&lt;/span&gt;&lt;/span&gt;
&lt;br /&gt;
&lt;br /&gt;Let's work our way up! &lt;br/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=Q9W1IysUFzE:SqK9pBbT8Vo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=Q9W1IysUFzE:SqK9pBbT8Vo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=Q9W1IysUFzE:SqK9pBbT8Vo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=Q9W1IysUFzE:SqK9pBbT8Vo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=Q9W1IysUFzE:SqK9pBbT8Vo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=Q9W1IysUFzE:SqK9pBbT8Vo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/Q9W1IysUFzE" height="1" width="1"/&gt;</content><link rel="related" href="http://wiki.cpantesters.org/" title="CPAN tester" /><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/4647188225292684121/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2011/06/cpan-tester.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4647188225292684121?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4647188225292684121?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/Q9W1IysUFzE/cpan-tester.html" title="CPAN tester" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2011/06/cpan-tester.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkYNRXw9cCp7ImA9Wx9WEUU.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-2751139112918344464</id><published>2011-01-16T13:47:00.003+01:00</published><updated>2011-01-16T14:23:14.268+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-01-16T14:23:14.268+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="chromatic" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl news" /><category scheme="http://www.blogger.com/atom/ns#" term="Modern Perl" /><title>Modern Perl</title><content type="html">Last November, &lt;a href="http://twitter.com/#!/chromatic_x"&gt;chromatic&lt;/a&gt; announced the availability of his &lt;a href="http://www.modernperlbooks.com/mt/"&gt;book on Modern Perl&lt;/a&gt;. His creation is geared towards beginner Perl programmers who want to learn how to use the language in the most effective way, based on experienced programmers' know-how.&lt;br /&gt;The book is also recommended to anyone who wrote Perl scripts in the distant past and wants to take advantage of Perl 5's latest features and good coding practices.&lt;br /&gt;You can download the pdf file from &lt;a href="http://www.onyxneon.com/books/modern_perl/index.html"&gt;the companion site&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=6j7b24twsbg:p_qfByNJSbo:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=6j7b24twsbg:p_qfByNJSbo:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=6j7b24twsbg:p_qfByNJSbo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=6j7b24twsbg:p_qfByNJSbo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=6j7b24twsbg:p_qfByNJSbo:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=6j7b24twsbg:p_qfByNJSbo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/6j7b24twsbg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/2751139112918344464/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2011/01/modern-perl.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/2751139112918344464?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/2751139112918344464?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/6j7b24twsbg/modern-perl.html" title="Modern Perl" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2011/01/modern-perl.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0AERn09cSp7ImA9WhdaGUs.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-3244289864375613255</id><published>2010-02-12T22:10:00.007+01:00</published><updated>2011-10-30T10:08:27.369+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2011-10-30T10:08:27.369+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Google AI Challenge" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><title>Google AI Challenge: move Perl up the charts!</title><content type="html">If you get snowed in this week-end, here's a fun way to pass the time: enter the &lt;a href="http://csclub.uwaterloo.ca/contest/index.php"&gt;Google AI challenge&lt;/a&gt;!&lt;br /&gt;Organized by the University of Waterloo (Canada) and sponsored by Google, this challenge lets you compete in a &lt;a href="http://csclub.uwaterloo.ca/contest/visualizer.php?game_id=3355177"&gt;game of Tron&lt;/a&gt; against other people's algorithms from a wide selection of programming languages.&lt;br /&gt;Sadly, Perl is not widely represented and the highest Perl score is at the 176th rank as of this Friday night.&lt;br /&gt;The contest ends on the 26th of this month. Who will care to test their Perl skills?&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=qbPrd5bWGHA:zpgylC8tOu4:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=qbPrd5bWGHA:zpgylC8tOu4:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=qbPrd5bWGHA:zpgylC8tOu4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=qbPrd5bWGHA:zpgylC8tOu4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=qbPrd5bWGHA:zpgylC8tOu4:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=qbPrd5bWGHA:zpgylC8tOu4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/qbPrd5bWGHA" height="1" width="1"/&gt;</content><link rel="related" href="http://csclub.uwaterloo.ca/contest/index.php" title="Google AI Challenge: move Perl up the charts!" /><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/3244289864375613255/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2010/02/google-ai-challenge-move-perl-up-charts.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/3244289864375613255?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/3244289864375613255?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/qbPrd5bWGHA/google-ai-challenge-move-perl-up-charts.html" title="Google AI Challenge: move Perl up the charts!" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2010/02/google-ai-challenge-move-perl-up-charts.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUUERH49fCp7ImA9WxBREEQ.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-1013024869003201527</id><published>2009-12-22T17:17:00.012+01:00</published><updated>2009-12-29T15:33:25.064+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-29T15:33:25.064+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="POD" /><category scheme="http://www.blogger.com/atom/ns#" term="perldoc" /><title>Reentrant perldoc help</title><content type="html">Just want to elaborate on &lt;a href="http://damienlearnsperl.blogspot.com/2009/03/plain-old-documentation-pod.html"&gt;a tip that I gave back in March&lt;/a&gt;.&lt;br /&gt;I have a somehow standard way of displaying help for my scripts:&lt;br /&gt;I display the POD data using the &lt;span style="font-family:courier new;"&gt;$0&lt;/span&gt; perl internal variable.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$0&lt;/span&gt; (or &lt;span style="font-family:courier new;"&gt;$PROGRAM_NAME&lt;/span&gt; if you are using the &lt;span style="font-family:courier new;"&gt;use English;&lt;/span&gt; pragma) "contains the name of the file containing the Perl script being executed", to quote &lt;a href="http://oreilly.com/catalog/9780596000271"&gt;the Camel book&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;The help section is printed on screen if a script requires a parameter but none has been provided. I used to write it this way for a command line accepting only one parameter:&lt;br /&gt;&lt;pre name="code" class="perl"&gt;sub get_help {&lt;br /&gt;    system("perldoc $0");&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;However, I recently ran into a slight difficulty.&lt;br /&gt;On Windows, &lt;span style="font-family:courier new;"&gt;$0&lt;/span&gt; contains the disk letter followed by the complete path and finally the file name. For example:&lt;br /&gt;&lt;span style="font-family:arial;"&gt;C:\Users\Damien\Desktop\test coverage\Perl Scripts&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Notice the white spaces in the directory names.&lt;br /&gt;When trying to perldoc this particular file name, I would get an error stating that there is no documentation for &lt;span style="font-family:arial;"&gt;"C:\Users\Damien\Desktop\test", "coverage\Perl"&lt;/span&gt; nor &lt;span style="font-family:arial;"&gt;"Scripts&lt;/span&gt;".&lt;br /&gt;&lt;br /&gt;My first reaction was simply to surround the &lt;span style="font-family:courier new;"&gt;$0&lt;/span&gt; file name with "" as shown below:&lt;br /&gt;&lt;pre name="code" class="perl"&gt;sub get_help {&lt;br /&gt;    system("perldoc \"$0\"");&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;[Added Dec. 29th]&lt;br /&gt;However, an enlightened reader pointed me to the best solution:&lt;br /&gt;&lt;pre name="code" class="perl"&gt;sub get_help {&lt;br /&gt;    system("perldoc", $0);&lt;br /&gt;    exit;&lt;br /&gt;}&lt;br /&gt;my $arg = $ARGV[0] || &amp;amp;get_help;&lt;/pre&gt;&lt;br /&gt;Using the list argument form of the system function avoids relying on the shell to run your command.&lt;br /&gt;&lt;br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=EM51wQcfB_E:yoa7ieaDDnk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=EM51wQcfB_E:yoa7ieaDDnk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=EM51wQcfB_E:yoa7ieaDDnk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=EM51wQcfB_E:yoa7ieaDDnk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=EM51wQcfB_E:yoa7ieaDDnk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=EM51wQcfB_E:yoa7ieaDDnk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/EM51wQcfB_E" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/1013024869003201527/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/12/reentrant-perldoc-help.html#comment-form" title="7 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1013024869003201527?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1013024869003201527?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/EM51wQcfB_E/reentrant-perldoc-help.html" title="Reentrant perldoc help" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>7</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/12/reentrant-perldoc-help.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUEGSH06cCp7ImA9WxNRGUg.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-7130115404041946390</id><published>2009-09-14T21:33:00.002+02:00</published><updated>2009-09-14T21:47:09.318+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-14T21:47:09.318+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Windows" /><category scheme="http://www.blogger.com/atom/ns#" term="Padre" /><title>Installing Padre on Windows Vista</title><content type="html">Last week, I (re-)installed &lt;a href="http://padre.perlide.org/"&gt;Padre &lt;/a&gt;on my Windows Vista machine. &lt;a href="http://padre.perlide.org/"&gt;Padre&lt;/a&gt; is a development environment geared towards Perl programmers, with a focus on Perl beginners.&lt;br /&gt;I use the &lt;a href="http://strawberryperl.com/"&gt;Strawberry Perl&lt;/a&gt; distribution (5.10.0.6) and read that it was a breeze to install Padre.&lt;br /&gt;Well, it almost is.&lt;br /&gt;I opened the cpan shell (typing &lt;span style="font-family:courier new;"&gt;cpan&lt;/span&gt; in a DOS shell is all it takes if C:\strawberry\perl\bin is in your PATH).&lt;br /&gt;The regular install (&lt;span style="font-family:courier new;"&gt;install Padre&lt;/span&gt;) failed because of a dependency on Wx::Perl::ProcessStream not building. Just force install that module (&lt;span style="font-family:courier new;"&gt;force install Wx::Perl::ProcessStream&lt;/span&gt;) then install Padre (a ticket has already been written for the issue).&lt;br /&gt;It works like a charm, no need to force install Padre anymore!&lt;br /&gt;So if you are a Perl beginner and want to use an editor written in Perl + suited for Perl tasks, you have no excuse anymore.&lt;br /&gt;&lt;br /&gt;If you already have Padre and want to update it to &lt;a href="http://blog.ryan52.info/?p=3"&gt;version 0.46&lt;/a&gt; released today (September 14th 2009), type &lt;span style="font-family:courier new;"&gt;upgrade Padre&lt;/span&gt; in your cpan shell. Better yet, you can update directly from the Padre Plugins menu: Plugins&gt;Module Tools&gt;Install CPAN Module and type Padre.&lt;br/&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=CmIjmfBCAkk:MW1m9VNpqss:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=CmIjmfBCAkk:MW1m9VNpqss:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=CmIjmfBCAkk:MW1m9VNpqss:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=CmIjmfBCAkk:MW1m9VNpqss:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=CmIjmfBCAkk:MW1m9VNpqss:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=CmIjmfBCAkk:MW1m9VNpqss:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/CmIjmfBCAkk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/7130115404041946390/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/09/installing-padre-on-windows-vista.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/7130115404041946390?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/7130115404041946390?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/CmIjmfBCAkk/installing-padre-on-windows-vista.html" title="Installing Padre on Windows Vista" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/09/installing-padre-on-windows-vista.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMBRHs-eip7ImA9WxNREU4.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-7437389679891894260</id><published>2009-09-05T09:26:00.005+02:00</published><updated>2009-09-05T09:40:55.552+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-05T09:40:55.552+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="brian d foy" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl documentation" /><title>Learning Perl for cheap!</title><content type="html">Brian d foy announced on his blog &lt;a href="http://use.perl.org/articles/09/08/24/2012226.shtml"&gt;a price drop on O'Reilly Perl books&lt;/a&gt;, including his own &lt;a href="http://oreilly.com/catalog/9780596520106/"&gt;"Learning Perl" book&lt;/a&gt; that he co-wrote with Randal Schwartz and Tom Phoenix.&lt;br /&gt;With the discount code found in the comment section, the grand total is... $6.49 for a must have in every programmer's library!&lt;br /&gt;Credits to RAT for &lt;a href="http://yesistilluseperl.blogspot.com/2009/09/cheap-books.html"&gt;announcing the news&lt;/a&gt; first.&lt;br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=gWwRA9yvMZM:y1oxiLytq_A:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=gWwRA9yvMZM:y1oxiLytq_A:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=gWwRA9yvMZM:y1oxiLytq_A:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=gWwRA9yvMZM:y1oxiLytq_A:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=gWwRA9yvMZM:y1oxiLytq_A:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=gWwRA9yvMZM:y1oxiLytq_A:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/gWwRA9yvMZM" height="1" width="1"/&gt;</content><link rel="related" href="http://use.perl.org/articles/09/08/24/2012226.shtml" title="Learning Perl for cheap!" /><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/7437389679891894260/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/09/learning-perl-for-cheap.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/7437389679891894260?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/7437389679891894260?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/gWwRA9yvMZM/learning-perl-for-cheap.html" title="Learning Perl for cheap!" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/09/learning-perl-for-cheap.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAGRXg8fyp7ImA9WxJUFk0.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-4162311571780559533</id><published>2009-07-14T21:36:00.000+02:00</published><updated>2009-07-14T21:45:24.677+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-14T21:45:24.677+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Magic" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><category scheme="http://www.blogger.com/atom/ns#" term="MMORPG" /><title>Perl modules of online MMORPG</title><content type="html">&lt;span style="font-weight: bold;"&gt;What happened to MTG_Studio?&lt;br /&gt;&lt;/span&gt;&lt;span&gt;I &lt;/span&gt;&lt;span&gt;was distraught&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;&lt;span&gt;to see that my favorite tool&lt;/span&gt;&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;to manage a Magic: The Gathering&lt;span style="font-weight: bold;"&gt; &lt;/span&gt;card collection has been suspended (probably by Wizard of the Coast). Hopefully it is sadly temporary (that's what &lt;a href="http://en.wikipedia.org/wiki/Beaker_%28Muppet%29"&gt;Beaker&lt;/a&gt; keeps telling me anyway) but I will not bet much on that. If anyone has news, please let me know.&lt;br /&gt;&lt;br /&gt;That event prompted me to wonder if there was any module on CPAN dealing with MTG.&lt;br /&gt;I was surprised not to find any, so I may just have to do something about that.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;MMORPG love from Perl?&lt;/span&gt;&lt;br /&gt;On the other hand, I found a few modules related to massively multi player role playing games.&lt;ul style="font-style: italic;"&gt;&lt;li&gt;World Of Warcraft&lt;/li&gt;&lt;/ul&gt;- &lt;a href="http://search.cpan.org/%7Efranckc/Games-WoW-Armory-0.0.7/lib/Games/WoW/Armory.pm"&gt;Games::WoW::Armory&lt;/a&gt; - Access to the WoW Armory&lt;br /&gt;- &lt;a href="http://search.cpan.org/%7Efranckc/Bot-BasicBot-Pluggable-Module-WoWPVP-0.02/lib/Bot/BasicBot/Pluggable/Module/WoWPVP.pm"&gt;Bot::BasicBot::Pluggable::Module::WoWPVP&lt;/a&gt; - Fetch information about pvp grades for World Of Warcraft&lt;br /&gt;- &lt;a href="http://search.cpan.org/%7Esock/WWW-Wow-RealmStatus-0.5/lib/WWW/Wow/RealmStatus.pm"&gt;WWW::Wow::RealmStatus&lt;/a&gt; - The great new WWW::Wow::RealmStatus!&lt;br /&gt;- &lt;a href="http://search.cpan.org/%7Esscotto/WoW-Wiki-0.01/lib/WoW/Wiki.pm"&gt;WoW::Wiki&lt;/a&gt; - Perl extension to parse WoW wikki markup&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Lord of the Rings Online&lt;/li&gt;&lt;/ul&gt;- There is no Perl module yet but &lt;a href="http://my.lotro.com/bracket/datalotrocom-usage-guide/"&gt;a LOTRO Web API exists&lt;/a&gt;!&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;EverQuest&lt;/li&gt;&lt;/ul&gt;- &lt;a href="http://search.cpan.org/%7Epjf/Games-EverQuest-LogLineParser-0.09/lib/Games/EverQuest/LogLineParser.pm"&gt;Games::EverQuest::LogLineParser&lt;/a&gt; - Perl extension for parsing lines from the EverQuest log file.&lt;br /&gt;- &lt;a href="http://search.cpan.org/search?query=everquest&amp;amp;mode=all"&gt;Other Perl scripts&lt;/a&gt; exist to complement the LogLineParser module&lt;br /&gt;&lt;ul style="font-style: italic;"&gt;&lt;li&gt;Eve Online&lt;/li&gt;&lt;/ul&gt;- &lt;a href="http://search.cpan.org/%7Ebluefeet/Games-EveOnline-API-0.02/lib/Games/EveOnline/API.pm"&gt;Games::EveOnline::API&lt;/a&gt; - A simple Perl wrapper around the EveOnline XML API.&lt;br /&gt;- &lt;a href="http://search.cpan.org/%7Echrisc/WebService-EveOnline-0.62/lib/WebService/EveOnline.pm"&gt;WebService::EveOnline&lt;/a&gt; -- a wrapper intended to (eventually) provide a useful interface to the MMORPG game, "Eve Online"&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;Neverwinter Nights&lt;/span&gt; (not really an MMORPG)&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;- &lt;a href="http://search.cpan.org/%7Esscotto/Games-NeverwinterNights-Query-1.0/Query.pm"&gt;Games::NeverwinterNights::Query&lt;/a&gt; - Query Perl class to query a Neverwint Nights Server&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;span style="font-style: italic;"&gt;F.E.A.R.&lt;/span&gt; (not really an MMORPG)&lt;/li&gt;&lt;/ul&gt;- &lt;a href="http://search.cpan.org/%7Eevank/Games-FEAR-Log-0.02/lib/Games/FEAR/Log.pm"&gt;Games::FEAR::Log&lt;/a&gt; - Log analysis tool for F.E.A.R. dedicated servers&lt;br /&gt;&lt;br /&gt;Does anyone out there have written or used an online PC game-related module?&lt;br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=H_EpLvzSxo4:I8lX7UKNPWc:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=H_EpLvzSxo4:I8lX7UKNPWc:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=H_EpLvzSxo4:I8lX7UKNPWc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=H_EpLvzSxo4:I8lX7UKNPWc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=H_EpLvzSxo4:I8lX7UKNPWc:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=H_EpLvzSxo4:I8lX7UKNPWc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/H_EpLvzSxo4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/4162311571780559533/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/07/perl-modules-of-online-mmorpg.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4162311571780559533?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4162311571780559533?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/H_EpLvzSxo4/perl-modules-of-online-mmorpg.html" title="Perl modules of online MMORPG" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>1</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/07/perl-modules-of-online-mmorpg.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUER3Yyeyp7ImA9WhJWFEQ.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-8288823859099323160</id><published>2009-06-10T23:15:00.001+02:00</published><updated>2012-08-20T21:16:46.893+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-20T21:16:46.893+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="wxPerl" /><title>Adding a menu bar to the twitter GUI: part 5</title><content type="html">&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; font-weight: bold; line-height: 22.66666603088379px;"&gt;Updating to the new Net::Twitter::Lite API&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;Marc Mims updated the API of his twitter's interface module for Perl.&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;There are two versions:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;&lt;a href="http://search.cpan.org/~mmims/Net-Twitter-3.18003/lib/Net/Twitter.pod" target="_blank"&gt;Net::Twitter v3.18&lt;/a&gt;&amp;nbsp;- Major update, object oriented, based on Moose.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;&lt;a href="http://search.cpan.org/~mmims/Net-Twitter-Lite-0.11002/lib/Net/Twitter/Lite.pm" target="_blank"&gt;Net::twitter::Lite v0.02&lt;/a&gt;&lt;span id="goog_1538643603"&gt;&lt;/span&gt;&lt;span id="goog_1538643604"&gt;&lt;/span&gt;&lt;a href="http://www.blogger.com/"&gt;&lt;/a&gt;&amp;nbsp;- Not so complete but requiring less dependencies.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;In order to use the Lite version (largely sufficient for my modest needs), only trivial changes are needed in the twit_GUI.pl script:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;ul style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;replace&amp;nbsp;&lt;span style="font-family: 'courier new';"&gt;use Net::Twitter&lt;/span&gt;&amp;nbsp;by&amp;nbsp;&lt;span style="font-family: 'courier new';"&gt;use Net::Twitter::Lite&lt;/span&gt;&amp;nbsp;(duh!)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style="background-color: white;"&gt;replace calls to&amp;nbsp;&lt;span style="font-family: 'courier new';"&gt;Net::Twitter-&amp;gt;new()&lt;/span&gt;&amp;nbsp;by calls to&amp;nbsp;&lt;span style="font-family: 'courier new';"&gt;Net::Twitter::Lite-&amp;gt;new()&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;This ensures that I am now using a module that is actively supported.&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; font-weight: bold; line-height: 22.66666603088379px;"&gt;Adding a menu bar&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;A menu bar can only be added to a Frame. According to the wxPerl docs,&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Arial, Lucida, Helvetica; font-size: 14px; line-height: 22.66666603088379px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 1.3em; margin: 1em 20px;"&gt;
&lt;span style="background-color: white; font-family: Arial, Lucida, Helvetica;"&gt;A frame is a window whose size and position can (usually) be changed by the user. It usually has thick borders and a title bar, and can optionally contain a menu bar, toolbar and status bar. A frame can contain any window that is not a frame or dialog.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;So, let's replace the Dialog occurences with Frame in the script.&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;The MyApp modules becomes:&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;pre class="perl:firstline[30]" name="code"&gt;##############################################################################
#
package MyApp;
#
##############################################################################
use vars qw(@ISA);
@ISA=qw(Wx::App);   # this tells Perl to look for unknown methods in the Wx::App module

use Wx qw(wxDefaultSize wxDefaultPosition);

sub OnInit {
    my($this) = @_;
    my $frame = MyFrame-&amp;gt;new('Twit', wxDefaultPosition);
    # set it as top window (so the app will automatically close when 
    # the last top window is closed)
    $this-&amp;gt;SetTopWindow($frame);
    $frame-&amp;gt;Show(1);
    1;
}&lt;/pre&gt;
&lt;br /&gt;
&lt;div&gt;
&lt;span style="background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.649999618530273px;"&gt;package MyDialog becomes package MyFrame:&lt;/span&gt;&lt;/div&gt;
&lt;pre class="perl:firstline[49]" name="code"&gt;##############################################################################
#
package MyFrame;
#
##############################################################################
use vars qw(@ISA);

@ISA=qw(Wx::Frame);

use Wx::Event qw(EVT_BUTTON EVT_CLOSE EVT_TEXT EVT_TEXT_MAXLEN);
use Wx qw(:sizer
          :statictext
          wxDefaultPosition
          wxDefaultSize
          wxDefaultValidator
          wxDEFAULT_DIALOG_STYLE
          wxID_OK
          wxOK
          wxRESIZE_BORDER
          wxTE_MULTILINE
          );

use constant MAX_POST_LENGTH =&amp;gt; 140;

sub new {
    my $class = shift;
    my $password_file;

    # Main window
    my $form_width  = 480;
    my $form_height = 195;
    # Array of line numbers used on the dialog window
    my @ylines = (0, 10, 20, 40, 80, 100);

    my $this = $class-&amp;gt;SUPER::new(
                            undef,  # parent
                            -1,     # id
                            $_[0],  # title
                            $_[1],  # position [x, y]
                           [$form_width, $form_height] # size [width, height]
                           );

    # Display the Wx icon on the application window
    $this-&amp;gt;SetIcon(Wx::GetWxPerlIcon());

    #--------------------------------------------------------------------------
    # Menu Bar
    #--------------------------------------------------------------------------     
    my $file_menu = Wx::Menu-&amp;gt;new('');
    my $menu_bar = Wx::MenuBar-&amp;gt;new();
    $menu_bar-&amp;gt;Append($file_menu, '&amp;amp;File');
    $this-&amp;gt;SetMenuBar($menu_bar);
    ...
&lt;/pre&gt;
&lt;div&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;Increase the form height by 10 pixels (up to 195) to make room for the menu bar.&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;And... voilà!&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_-EghEXBgxV4/Si7HDQ07AmI/AAAAAAAAAEQ/5BnN4G8q3N8/s1600-h/FrameBroken.jpg" style="background-color: #e7ffcf; color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;"&gt;&lt;img alt="First version of twit script using wxperl" border="0" id="BLOGGER_PHOTO_ID_5345428666605830754" src="http://1.bp.blogspot.com/_-EghEXBgxV4/Si7HDQ07AmI/AAAAAAAAAEQ/5BnN4G8q3N8/s400/FrameBroken.jpg" style="border: 1px solid rgb(120, 183, 73); display: block; height: 162px; margin: 0px auto 10px; padding: 4px; text-align: center; width: 400px;" title="First try" /&gt;&lt;/a&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;Er... not too pretty, let's go back to the doc. Oh wait, what is that about panels?&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;
&lt;blockquote style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 1.3em; margin: 1em 20px;"&gt;
&lt;span style="background-color: white;"&gt;A panel is a window on which controls are placed. It is usually placed within a frame. It contains minimal extra functionality over and above its parent class wxWindow; its main purpose is to be similar in appearance and functionality to a dialog, but with the flexibility of having any window as a parent.&lt;/span&gt;&lt;/blockquote&gt;
&lt;span style="background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;Ah ah! The trick is to place a wxPanel object inside the frame and then relate every existing GUI element to this panel as the parent window. Previously, all the elements (button, text dialog, etc.) had the wxFrame as a parent window, hence the dark grey background. Just add this line before the Menu Bar code:&lt;/span&gt;&lt;/div&gt;
&lt;pre class="perl:firstline[93]" name="code"&gt;    # Create a panel where to place GUI elements
    my $panel = Wx::Panel-&amp;gt;new($this, -1);
&lt;/pre&gt;
&lt;div&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;and replace the $this argument by $panel everywhere you need to set the parent ID.&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;Now we've got a menu bar element. You can fill it by appending menu elements to it as is shown in the code below. Each menu element can be appended in turn with menu options. The wxFrame::SetMenuBar() method displays a given menu bar.&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre class="perl:firstline[95]" name="code"&gt;    #--------------------------------------------------------------------------
    # Menu Bar
    #-------------------------------------------------------------------------- 
    my $menu_bar = Wx::MenuBar-&amp;gt;new();

    my $file_menu = Wx::Menu-&amp;gt;new(); 
    $file_menu-&amp;gt;Append(11, 'E&amp;amp;xit');
    $menu_bar-&amp;gt;Append($file_menu, '&amp;amp;File');
 
    my $help_menu = Wx::Menu-&amp;gt;new();
    $help_menu-&amp;gt;Append(21, '&amp;amp;About');
    $menu_bar-&amp;gt;Append($help_menu, '&amp;amp;Help');

    # wxFrame method to show a given menu bar
    $this-&amp;gt;SetMenuBar($menu_bar);
&lt;/pre&gt;
&lt;div&gt;
&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;The &amp;amp; in the string (eg: 'E&amp;amp;xit') shows what shortcut will be used in combination with the Alt key (eg: Alt + x for 'E&amp;amp;xit').&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;To link an event with a menu selection, use the EVT_MENU event:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;pre class="perl:firstline[110]" name="code"&gt;    EVT_MENU($this, 11, \&amp;amp;OnQuit);
    EVT_MENU($this, 21, \&amp;amp;OnAbout)
&lt;/pre&gt;
&lt;div&gt;
&lt;span style="background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;The callback methods can be implemented as such:&lt;/span&gt;&lt;/div&gt;
&lt;pre class="perl:firstline[381]" name="code"&gt;sub OnQuit {
    my $this = shift;
    $this-&amp;gt;Close( 1 );
}

sub OnAbout {
    my $this = shift;
    use Wx qw(wxOK wxCENTRE);
    Wx::MessageBox("twit_GUI $VERSION\n$version_date\n(c)DamienLearnsPerl",  # text
                   "About",                   # title bar
                   wxOK|wxCENTRE,             # buttons to display on form
                   $this                      # parent
                   );          
}
&lt;/pre&gt;
&lt;div&gt;
&lt;span style="background-color: white; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;End result under Vista? Tadaaa!&lt;/span&gt;&lt;br /&gt;
&lt;br style="background-color: #e7ffcf; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;
&lt;a href="http://1.bp.blogspot.com/_-EghEXBgxV4/SjAeMZRFQWI/AAAAAAAAAEY/QRTOxUN5tu8/s1600-h/Menu1.jpg" style="background-color: #e7ffcf; color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;"&gt;&lt;img alt="Improvement layout using panels" border="0" id="BLOGGER_PHOTO_ID_5345805955978576226" src="http://1.bp.blogspot.com/_-EghEXBgxV4/SjAeMZRFQWI/AAAAAAAAAEY/QRTOxUN5tu8/s400/Menu1.jpg" style="border: 1px solid rgb(120, 183, 73); display: block; height: 163px; margin: 0px auto 10px; padding: 4px; text-align: center; width: 400px;" title="Improvement" /&gt;&lt;/a&gt;&lt;span style="background-color: white;"&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;Next step:&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;- Load/save password files&lt;/span&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;br style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;" /&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;Find the whole new source code&amp;nbsp;&lt;/span&gt;&lt;a href="http://sites.google.com/site/damienlearnsperl/DLP-scripts" style="color: #78b749; font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px; text-decoration: none;"&gt;here&lt;/a&gt;&lt;span style="font-family: Verdana, sans-serif; font-size: 14px; line-height: 22.66666603088379px;"&gt;.&lt;/span&gt;&lt;/span&gt; &lt;/div&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=eqsTfBtiS-o:5h_1wngYeD8:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=eqsTfBtiS-o:5h_1wngYeD8:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=eqsTfBtiS-o:5h_1wngYeD8:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=eqsTfBtiS-o:5h_1wngYeD8:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=eqsTfBtiS-o:5h_1wngYeD8:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=eqsTfBtiS-o:5h_1wngYeD8:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/eqsTfBtiS-o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/8288823859099323160/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/06/adding-menu-bar-to-twitter-gui-part-5.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/8288823859099323160?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/8288823859099323160?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/eqsTfBtiS-o/adding-menu-bar-to-twitter-gui-part-5.html" title="Adding a menu bar to the twitter GUI: part 5" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_-EghEXBgxV4/Si7HDQ07AmI/AAAAAAAAAEQ/5BnN4G8q3N8/s72-c/FrameBroken.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/06/adding-menu-bar-to-twitter-gui-part-5.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkADRn0zcSp7ImA9WxJQGEU.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-3901243131033694011</id><published>2009-06-01T22:30:00.003+02:00</published><updated>2009-06-01T22:39:37.389+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-01T22:39:37.389+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogging" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl Iron Man" /><title>Perl Iron Man</title><content type="html">Ok, I've failed in the Perl Iron Man contest: it has been more than 10 days since last post :(&lt;br /&gt;But after the first thrills due to the project's novelty, there are not a lot of incentives coming from the Perl Iron Man organization (unless I've somehow missed it?):&lt;br /&gt;I was expecting leaderboards, post of the month, constructive critiques of blogs by writing professional, cheering pom pom girls, etc.&lt;br /&gt;I'm feeling a little bit let down right now... &lt;br&gt;&lt;/br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=hDVyeePA10c:Q8Na8Guk0iQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=hDVyeePA10c:Q8Na8Guk0iQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=hDVyeePA10c:Q8Na8Guk0iQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=hDVyeePA10c:Q8Na8Guk0iQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=hDVyeePA10c:Q8Na8Guk0iQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=hDVyeePA10c:Q8Na8Guk0iQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/hDVyeePA10c" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/3901243131033694011/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/06/perl-iron-man.html#comment-form" title="11 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/3901243131033694011?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/3901243131033694011?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/hDVyeePA10c/perl-iron-man.html" title="Perl Iron Man" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>11</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/06/perl-iron-man.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIEQnY7cCp7ImA9WxJRFkU.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-7443902226653077138</id><published>2009-05-17T21:35:00.008+02:00</published><updated>2009-05-18T23:01:43.808+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-18T23:01:43.808+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="wxPerl" /><title>Adding a wxPerl GUI to the twitter script: part 4 - Putting it all together</title><content type="html">Note: this article is part of a &lt;a href="http://damienlearnsperl.blogspot.com/search?q=wxPerl+GUI+twitter"&gt;series&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Today I've finished version 1.0.0 of twit_GUI.pl. Nothing fancy, I just added the Net:Twitter part from the &lt;a href="http://damienlearnsperl.blogspot.com/2009/02/improving-twit-perl-script.html"&gt;console version of twit.pl&lt;/a&gt; to the existing User Interface. I can now post to twitter.com or identi.ca from a graphical interface Perl program. That's how cool I am.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;New since version 0.0.2&lt;/span&gt;&lt;br /&gt;I removed the event handling on EVT_TEXT_MAXLEN because I realized that I didn't need to display a message when I reached 140 characters. The fact that you cannot type anything after the limit is enough. Keeping the message would have been annoying in fact...&lt;br /&gt;&lt;br /&gt;A "gentle" analysis from &lt;a href="http://perlcritic.com/"&gt;Perl::Critic&lt;/a&gt; made me change the way I was calling the &lt;span style="font-family:courier new;"&gt;open &lt;/span&gt;function.&lt;br /&gt;Before:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;open(LOGINFILE, $password_file)&lt;/span&gt;&lt;br /&gt;After:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;open(my $logfile_handle, '&lt;', $password_file)&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Explanation:&lt;br /&gt;- The LOGINFILE file handle is &lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;&lt;a href="http://perlcritic.com/pod/Perl/Critic/Policy/InputOutput/ProhibitBarewordFileHandles.html"&gt;dangerous&lt;/a&gt; because as such, LOGINFILE is declared as a global. It could already be used as another file's handle.&lt;br /&gt;- The '&lt;' second argument indicates that the file is open in read-only mode. It is easier to see that than in the previous writing and it avoids bugs for file names starting with '&lt;' or '&gt;' (see the &lt;a href="http://perlcritic.com/pod/Perl/Critic/Policy/InputOutput/ProhibitTwoArgOpen.html"&gt;full explanation&lt;/a&gt;).&lt;br /&gt;&lt;br /&gt;I also replaced the double quotes (") by single quotes (') everywhere variable interpolation was not needed.&lt;br /&gt;Speaking about quotes, I removed those surrounding the identifiers of the hash elements.&lt;br /&gt;Speaking about hashes, I really enjoy how flexible they can be used for structuring your data. Take for example the &lt;span style="font-family:courier new;"&gt;%login&lt;/span&gt; hash in &lt;span style="font-family:courier new;"&gt;$this-&gt;{login}&lt;/span&gt;. It lets me organize data as such:&lt;br /&gt;&lt;pre name="code" class="perl:nogutter"&gt;&lt;br /&gt;%login = {&lt;br /&gt;      user_name =&gt; { twitter =&gt; "Twitter.com user name",&lt;br /&gt;                     identica =&gt; "Identica user name"&lt;br /&gt;                   },&lt;br /&gt;      password =&gt;  { twitter =&gt; "Twitter.com password",&lt;br /&gt;                     identica =&gt; "Identica password"&lt;br /&gt;                   }&lt;br /&gt;}&lt;/pre&gt;And I can add to the hash construct as I need it. Of course, if not documented, I can see that hashes contructed in this manner could get pretty tough to maintain.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;What's next?&lt;/span&gt;&lt;br /&gt;There are improvements to be made to the twit_GUI script, especially concerning the password handling. Today I have a hard-coded path inside the script which is very ugly. I am not proud of myself but the Perl Iron Man's deadline is arriving soon and I want to stay in the contest ;)&lt;br /&gt;I will apply the finishing touch in a next post.&lt;br /&gt;&lt;br /&gt;I am not sure if I should keep the POD comments. I was thinking about throwing it all inside an "About" menu item. Maybe I can display the POD info directly in a MessageBox, in a reentrant fashion.&lt;br /&gt;&lt;br /&gt;I will not plaster the walls of this blog with yet another listing but as always you can find all script versions on the &lt;a href="http://sites.google.com/site/damienlearnsperl/DLP-scripts"&gt;DamienLearnsPerl's companion site&lt;/a&gt;.&lt;br /&gt;&lt;br&gt;&lt;/br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=63w0LukfqsA:EN0WrxjAi10:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=63w0LukfqsA:EN0WrxjAi10:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=63w0LukfqsA:EN0WrxjAi10:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=63w0LukfqsA:EN0WrxjAi10:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=63w0LukfqsA:EN0WrxjAi10:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=63w0LukfqsA:EN0WrxjAi10:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/63w0LukfqsA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/7443902226653077138/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/05/adding-wxperl-gui-to-twitter-script_17.html#comment-form" title="2 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/7443902226653077138?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/7443902226653077138?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/63w0LukfqsA/adding-wxperl-gui-to-twitter-script_17.html" title="Adding a wxPerl GUI to the twitter script: part 4 - Putting it all together" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>2</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/05/adding-wxperl-gui-to-twitter-script_17.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEQERH4_eyp7ImA9WxJSGEo.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-1784476166740411017</id><published>2009-05-09T12:28:00.006+02:00</published><updated>2009-05-09T15:38:25.043+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-09T15:38:25.043+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="wxPerl" /><title>Adding a wxPerl GUI to the twitter script: part 3 - Polishing up the UI</title><content type="html">&lt;a href="http://damienlearnsperl.blogspot.com/2009/04/adding-wxperl-gui-to-twitter-script.html"&gt;Last time I wrote about the WxPerl twitter GUI&lt;/a&gt;, I made a nice little drawing about what I wanted to achieve.&lt;br /&gt;The first try wasn't too far off but a few functionalities are still missing. One of them is the real-time updating of the remaining text characters (from a limit of 140). Obviously, what I need is an event on a key stroke to update the number of characters.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;WxEvents documentation&lt;/span&gt;&lt;br /&gt;Command events can be handled by macros listed in the WxWidget/WxPerl's manual under the &lt;a href="http://docs.wxwidgets.org/2.8.4/wx_wxcommandevent.html#wxcommandevent"&gt;wxCommandEvent page.&lt;/a&gt;&lt;br /&gt;Of interest to the twitter GUI script are:&lt;br /&gt;&lt;br /&gt;&lt;table&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td valign="top" width="277"&gt;&lt;b&gt;EVT_TEXT(id, func)&lt;/b&gt; &lt;/td&gt;  &lt;td valign="top"&gt; Process a wxEVT_COMMAND_TEXT_UPDATED command, which is generated by a wxTextCtrl control. &lt;/td&gt;&lt;/tr&gt;      &lt;tr&gt;&lt;td valign="top" width="277"&gt; &lt;b&gt;EVT_TEXT_MAXLEN(id, func)&lt;/b&gt; &lt;/td&gt;  &lt;td valign="top"&gt; Process a wxEVT_COMMAND_TEXT_MAXLEN command, which is generated by a wxTextCtrl control when the user tries to enter more characters into it than the limit previously set with  &lt;a href="http://docs.wxwidgets.org/2.8.4/wx_wxtextctrl.html#wxtextctrlsetmaxlength"&gt;SetMaxLength&lt;/a&gt;. &lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;&lt;br /&gt;The first macro (EVT_TEXT) can be linked to the TextControl box where the message is being typed. Whenever a character is added or removed to the update message, the event handler will compute and display the remaining characters left before hitting the 140 limit.&lt;br /&gt;The EVT_TEXT_MAXLEN macro will link the update message's TextControl to a subroutine that will be called when 140 characters have been inputted.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Code&lt;/span&gt;&lt;br /&gt;When using WxPerl constants, the first thing to remember is to declare them at the beginning of the package.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;use Wx::Event qw(EVT_BUTTON EVT_CLOSE EVT_TEXT EVT_TEXT_MAXLEN);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;To find out the complete list of symbols, you can check the Wx source code in the lib/Wx/Wx_Exp.pm file located in your Perl directory. In this file, you will also be able to see all existing tags created to group related constants. For example, &lt;span style="font-family:courier new;"&gt;'statictext'&lt;/span&gt; is defined as:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;$EXPORT_TAGS{'statictext'} = [ qw(wxALIGN_LEFT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wxALIGN_CENTRE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wxALIGN_CENTER&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wxALIGN_RIGHT&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wxST_NO_AUTORESIZE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wxST_ELLIPSIZE_START&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wxST_ELLIPSIZE_MIDDLE&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wxST_ELLIPSIZE_END&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;wxST_MARKUP) ];&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Writing the following line in your program:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;use Wx qw(:statictext);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;will import all nine constants listed above.&lt;br /&gt;&lt;br /&gt;Coming back to our problem at hand, if we create a TextControl and StaticText objects like this&lt;br /&gt;&lt;pre name="code" class="perl:firstline[111]"&gt;&lt;br /&gt;    #&lt;br /&gt;    # Text control to enter message to twit&lt;br /&gt;    #&lt;br /&gt;    $this-&gt;{update_text} = Wx::TextCtrl-&gt;new(&lt;br /&gt;            $this,                      # parent window&lt;br /&gt;            -1,                         # control identifier&lt;br /&gt;            "Type your message here",   # default text value&lt;br /&gt;            [20, $ylines[3]],           # text control position [x, y]&lt;br /&gt;            [435, 35],                  # text control size [width, height]&lt;br /&gt;            wxTE_MULTILINE              # style: wxTE_MULTILINE=The text control allows multiple lines&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    # A EVT_TEXT_MAXLEN event is generated when the number of characters in the update_text control&lt;br /&gt;    # reaches the maximum passed value.&lt;br /&gt;    $this-&gt;{update_text}-&gt;SetMaxLength(MAX_POST_LENGTH);&lt;br /&gt;&lt;br /&gt;    #&lt;br /&gt;    # Static text placed at the top-right position of the text control&lt;br /&gt;    #&lt;br /&gt;    Wx::StaticText-&gt;new(&lt;br /&gt;            $this,              # parent&lt;br /&gt;            -1,                 # id&lt;br /&gt;            'characters left',  # label&lt;br /&gt;            [$form_width - 95, $ylines[2]]    # position [x, y]&lt;br /&gt;    );&lt;br /&gt;&lt;br /&gt;    #&lt;br /&gt;    # Static text displaying number of characters left before reaching the max amount&lt;br /&gt;    #&lt;br /&gt;    $this-&gt;{static_text}{'CharsLeft'} = Wx::StaticText-&gt;new(&lt;br /&gt;                                            $this,              # parent&lt;br /&gt;                                            -1,                 # id&lt;br /&gt;                                            MAX_POST_LENGTH - $this-&gt;{update_text}-&gt;GetLastPosition,  # label&lt;br /&gt;                                            [$form_width - 115, $ylines[2]],    # position [x, y]&lt;br /&gt;                                            wxDefaultSize,      # size&lt;br /&gt;                                            Wx::wxALIGN_RIGHT   # style. Not implemented yet?&lt;br /&gt;                                        );&lt;/pre&gt;&lt;br /&gt;then calling the following event handlers&lt;br /&gt;&lt;pre name="code" class="perl:firstline[204]"&gt;&lt;br /&gt;    # Events associated to the update_text Control&lt;br /&gt;    # EVT_TEXT_MAXLEN is generated when the length of the Text control&lt;br /&gt;    # becomes larger than the value set by SetMaxLength&lt;br /&gt;    EVT_TEXT_MAXLEN($this, $this-&gt;{update_text}, \&amp;MaxTextReached);&lt;br /&gt;&lt;br /&gt;    # EVT_TEXT is generated when a character is typed inside the Text control&lt;br /&gt;    # We use it to update the display of characters left for message&lt;br /&gt;    EVT_TEXT($this, $this-&gt;{update_text}, \&amp;CountCharsLeft);&lt;/pre&gt;&lt;br /&gt;with the subroutines definition being:&lt;br /&gt;&lt;pre name="code" class="perl:firstline[218]"&gt;&lt;br /&gt;sub CountCharsLeft {&lt;br /&gt;    my($this, $event) = @_;&lt;br /&gt;&lt;br /&gt;    # Update number of remaining characters = MAX - current text size&lt;br /&gt;    my $chars_left = MAX_POST_LENGTH - $this-&gt;{update_text}-&gt;GetLastPosition;&lt;br /&gt;    $this-&gt;{static_text}{'CharsLeft'}-&gt;SetLabel($chars_left);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;sub MaxTextReached {&lt;br /&gt;    my($this, $event) = @_;&lt;br /&gt;&lt;br /&gt;    Wx::MessageBox(&lt;br /&gt;            "You have reached the maximum number of characters",      # text&lt;br /&gt;            "Update too big",   # title bar&lt;br /&gt;            wxOK,        # buttons to display on form&lt;br /&gt;            $this        # parent&lt;br /&gt;    );&lt;br /&gt;}&lt;/pre&gt;then every time &lt;span style="font-family:monospace;"&gt;&lt;/span&gt;that &lt;span style="font-family:courier new;"&gt;{update_text}&lt;/span&gt; is edited, &lt;span style="font-family:courier new;"&gt;CountCharsLeft()&lt;/span&gt; will be called and will reset the label for &lt;span style="font-family:courier new;"&gt;{static_text}{'CharsLeft'}&lt;/span&gt; with the new value computed from &lt;span style="font-family:courier new;"&gt;{update_text}-&gt;GetLastPosition&lt;/span&gt;.&lt;br /&gt;I couldn't achieve right-aligning the number of characters. From reading the Wx::Perl::Dialog source, I do not think that the style argument is supported yet.&lt;br /&gt;&lt;br /&gt;The result?&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_-EghEXBgxV4/SgWB8xYOfpI/AAAAAAAAAEI/DN6Is95sCBE/s1600-h/GUI2.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 159px;" src="http://1.bp.blogspot.com/_-EghEXBgxV4/SgWB8xYOfpI/AAAAAAAAAEI/DN6Is95sCBE/s400/GUI2.jpg" alt="" id="BLOGGER_PHOTO_ID_5333812214737305234" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;Now one step further to accomplish my goal of being able to understand Padre's code once I put my nose in it...&lt;br /&gt;&lt;br&gt;&lt;/br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=RcSNIEO1R8g:oVJxmASfHJU:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=RcSNIEO1R8g:oVJxmASfHJU:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=RcSNIEO1R8g:oVJxmASfHJU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=RcSNIEO1R8g:oVJxmASfHJU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=RcSNIEO1R8g:oVJxmASfHJU:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=RcSNIEO1R8g:oVJxmASfHJU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/RcSNIEO1R8g" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/1784476166740411017/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/05/adding-wxperl-gui-to-twitter-script.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1784476166740411017?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1784476166740411017?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/RcSNIEO1R8g/adding-wxperl-gui-to-twitter-script.html" title="Adding a wxPerl GUI to the twitter script: part 3 - Polishing up the UI" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_-EghEXBgxV4/SgWB8xYOfpI/AAAAAAAAAEI/DN6Is95sCBE/s72-c/GUI2.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/05/adding-wxperl-gui-to-twitter-script.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUQGSXo7eSp7ImA9WxJSE04.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-6300211673300013569</id><published>2009-05-03T09:32:00.002+02:00</published><updated>2009-05-03T09:55:28.401+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-03T09:55:28.401+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl news" /><category scheme="http://www.blogger.com/atom/ns#" term="Strawberry Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Padre" /><category scheme="http://www.blogger.com/atom/ns#" term="blogging" /><title>AdSense integration to Google analytics and other news</title><content type="html">&lt;span style="font-weight: bold;"&gt;AdSense&lt;/span&gt;&lt;br /&gt;If you are a blogger with AdSense revenues, you can now integrate the AdSense stats to your Google Analytics account.&lt;br /&gt;To do so, just follow &lt;a href="http://adsense.blogspot.com/2009/04/analytics-integration-for-all.html"&gt;those very simple instructions&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;DamienLearnsPerl's April Analytics stats&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Thanks to the &lt;a href="http://damienlearnsperl.blogspot.com/2009/03/write-better-perl-with-perlcritic.html"&gt;Perl::Critic post&lt;/a&gt; appearing on &lt;a href="http://news.ycombinator.com/"&gt;Hacker News&lt;/a&gt;, there was a peak at 661 visits on the 28th of April!&lt;/li&gt;&lt;li&gt;The United States (728), France (98) and the UK (93) are the leading trio of visiting countries in April.&lt;/li&gt;&lt;li&gt;2/3 of visitors use Firefox, IE (8.8%) is in third place behind Safari (10%)&lt;/li&gt;&lt;li&gt;56% of visits originate from Windows, 21.5% from Linux and 20% from a Mac&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Strawberry Perl&lt;br /&gt;&lt;/span&gt;&lt;span&gt;&lt;a href="http://strawberryperl.com/"&gt;New versions&lt;/a&gt; are freshly available for both Perl 5.8.9 and 5.10.0.&lt;br /&gt;Check out &lt;a href="http://use.perl.org/%7EAlias/journal/38900"&gt;what's new&lt;/a&gt;!&lt;br /&gt;&lt;/span&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;The Perl Review&lt;/span&gt;&lt;br /&gt;The last issue is already 2-week old. Get it &lt;a href="http://www.theperlreview.com/"&gt;there&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Perl IronMan&lt;/span&gt;&lt;br /&gt;I entered the &lt;a href="http://www.enlightenedperl.org/ironman.html"&gt;IronMan challenge&lt;/a&gt;, the brainchild of &lt;a href="http://www.shadowcat.co.uk/blog/matt-s-trout/iron-man/"&gt;Matt Trout&lt;/a&gt; from Enlightened Perl. Check out all participating blogs in &lt;a href="http://ironman.enlightenedperl.org/"&gt;Planet Perl Iron Man&lt;/a&gt;!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Padre v0.34&lt;/span&gt;&lt;br /&gt;&lt;a href="http://szabgab.com/blog/2009/04/1240924550.html"&gt;Version 0.34 has been released&lt;/a&gt;. See the changelog &lt;a href="http://svn.perlide.org/padre/trunk/Padre/Changes"&gt;here&lt;/a&gt;.&lt;br&gt;&lt;br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=8m0xJXCalGM:4ULHgKwC_cQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=8m0xJXCalGM:4ULHgKwC_cQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=8m0xJXCalGM:4ULHgKwC_cQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=8m0xJXCalGM:4ULHgKwC_cQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=8m0xJXCalGM:4ULHgKwC_cQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=8m0xJXCalGM:4ULHgKwC_cQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/8m0xJXCalGM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/6300211673300013569/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/05/adsense-integration-to-google-analytics.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/6300211673300013569?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/6300211673300013569?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/8m0xJXCalGM/adsense-integration-to-google-analytics.html" title="AdSense integration to Google analytics and other news" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/05/adsense-integration-to-google-analytics.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MBR3w8fyp7ImA9WhJWFEQ.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-1580962711410878626</id><published>2009-04-29T22:42:00.000+02:00</published><updated>2012-08-20T21:37:36.277+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-20T21:37:36.277+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Larry Wall" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="wxPerl" /><title>Adding a wxPerl GUI to the twitter script: part 2 - Drawing the controls</title><content type="html">Part 2 of this series will describe how to draw the GUI elements thanks to some wxPerl magic.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;wxPerl Documentation&lt;/span&gt;&lt;br /&gt;
The documentation on wxPerl is rather sparse.&lt;br /&gt;
The best starting points are:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;An excellent tutorial from &lt;a href="http://www.perl.com/pub/a/2001/09/12/wxtutorial1.html"&gt;Jouke Visser over at Perl.com&lt;/a&gt; where you learn that wx stands for Windows - X to show off the portability of the library.&lt;/li&gt;
&lt;li&gt;Another series of &lt;a href="http://www.perlmonks.org/index.pl?node_id=112297"&gt;tutorials from boo_radley at perlmonks.org&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Those tutorial and a few more are already listed on the &lt;a href="http://wxperl.sourceforge.net/documentation.html"&gt;wxPerl site&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;By clicking on &lt;a href="http://prdownloads.sourceforge.net/wxperl/wxPerl-0.26-samples.zip"&gt;this link&lt;/a&gt;, you will start downloading example files from the wxPerl sourceforge repository. This is a very useful resource for the first-hand demo of a lot of controls.&lt;/li&gt;
&lt;li&gt;The Wx module for Perl is of course &lt;a href="http://search.cpan.org/~mbarbon/Wx-0.89/Wx.pm"&gt;downloadable from CPAN&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;When looking at the wxWidget doc, you can transpose to the wxPerl world by knowing that "in wxPerl all classes are named Wx::Something, so wxFrame is really Wx::Frame.   Static methods are called Wx::ClassName::Method(). Global function named   wxFunction() are accessible as Wx::Function()." [from the &lt;a href="http://wxperl.sourceforge.net/manual/manual4.html"&gt;wxPerl manual&lt;/a&gt;]&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-weight: bold;"&gt;Oooh the pretty drawings...&lt;/span&gt;&lt;br /&gt;
The code listing that I present here doesn't do anything useful. It just initializes some controls and places them on an application window.&lt;br /&gt;
However, I'll try to explain how to find the information so we can use any control supported by wxPerl.&lt;br /&gt;
If you go back to &lt;a href="http://damienlearnsperl.blogspot.com/2009/03/wxperl-adding-gui-to-twitter-script_6211.html"&gt;my previous post&lt;/a&gt; on the subject, you'll be reminded that the goal is to have a window that looks like that:&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_-EghEXBgxV4/SfjAvybfPpI/AAAAAAAAAD4/cA0I_wM6qU8/s1600-h/GUI1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="GUI drawing" border="0" id="BLOGGER_PHOTO_ID_5330222086216433298" src="http://1.bp.blogspot.com/_-EghEXBgxV4/SfjAvybfPpI/AAAAAAAAAD4/cA0I_wM6qU8/s400/GUI1.jpg" style="display: block; height: 214px; margin: 0px auto 10px; text-align: center; width: 400px;" title="GUI drawing" /&gt;&lt;/a&gt;&lt;br /&gt;
The first step is to actually get the main window displayed.&lt;br /&gt;
This is not straightforward, here's one way to do it.&lt;br /&gt;
&lt;pre class="perl" name="code"&gt;
#!/usr/bin/perl
use Modern::Perl;
use Wx;&lt;/pre&gt;
&lt;br /&gt;
...&lt;br /&gt;
&lt;pre class="perl:firstline[34]" name="code"&gt;
##############################################################################
#
package MyApp;
#
##############################################################################
use vars qw(@ISA);
@ISA=qw(Wx::App);   # this tells Perl to look for inkown methods in the Wx::App module

use Wx qw(wxDefaultSize wxDefaultPosition);

sub OnInit {
    my($this) = @_;
    my $dialog = MyDialog-&amp;gt;new("Twit", wxDefaultPosition);
    $this-&amp;gt;SetTopWindow($dialog);
    $dialog-&amp;gt;Show(1);
    1;
}&lt;/pre&gt;
...&lt;br /&gt;
&lt;pre class="perl:firstline[216]" name="code"&gt;
##############################################################################
#
package main;
#
##############################################################################

my($app) = MyApp-&amp;gt;new();
$app-&amp;gt;MainLoop();&lt;/pre&gt;
There's obviously a lot of code missing but I will talk a bit about packages as it is the first time that I am confronted to them (remember, I am learning Perl). There is a &lt;a href="http://perldoc.perl.org/perlmod.html#Packages"&gt;perldoc page on packages&lt;/a&gt;. To summarize greatly, the package keyword defines the beginning of a namespace (when used as &lt;span style="font-family: courier new;"&gt;package NAMESPACE)&lt;span style="font-family: verdana;"&gt;.&lt;/span&gt;&lt;/span&gt; &lt;span style="font-family: courier new;"&gt;&lt;br /&gt;&lt;/span&gt;By the way, I didn't invent the code construct above. I found it in the wxPerl demo from the "wxPerl-0.26-samples.zip" file that you can download from the &lt;a href="http://wxperl.sourceforge.net/download.html"&gt;document section of the official wxPerl's download page&lt;/a&gt;.&lt;br /&gt;
In the same section, you will find a link to download the html version of the wxWidget documentation.&lt;br /&gt;
&lt;br /&gt;
Line 222, we create an instance of MyApp and enter the hot loop. We will exit the loop when the MyApp object is destroyed (as a result of a click on the exit button for example).&lt;br /&gt;
&lt;br /&gt;
In Package MyApp starting at line 36, the &lt;span style="font-family: courier new;"&gt;@ISA=qw(Wx::App);&lt;/span&gt; line tells Perl to look for unknown methods in the Wx::App module.&lt;br /&gt;
The Wx::App::OnInit() routine is called at the creation of a Wx::App object. It will create the application's main window.&lt;br /&gt;
In this function, we call the new() method of the MyDialog package/namespace that is given below:&lt;br /&gt;
&lt;pre class="perl:firstline[53]" name="code"&gt;##############################################################################
#
package MyDialog;
#
##############################################################################

use vars qw(@ISA);

@ISA=qw(Wx::Dialog);

use Wx::Event qw(EVT_BUTTON EVT_CLOSE);
use Wx qw(:sizer
          wxDefaultPosition
          wxDefaultSize
          wxDefaultValidator
          wxDEFAULT_DIALOG_STYLE
          wxID_OK
          wxOK
          wxRESIZE_BORDER
          wxTE_MULTILINE
          );

use constant MAX_POST_LENGTH =&amp;gt; 140;

sub new {
    my $class = shift;

    # Main window
    my $form_width  = 480;
    my $form_height = 175;
    my $yline1      = 10;
    my $yline2      = 30;
    my $yline3      = 70;
    my $yline4      = 90;

    my $this = $class-&amp;gt;SUPER::new(
                            undef,  # parent
                            -1,     # id
                            $_[0],  # title
                            $_[1],  # position [x, y]
                            [$form_width, $form_height] # size [width, height]
                       );

    # Display the Wx icon on the application window
    $this-&amp;gt;SetIcon(Wx::GetWxPerlIcon());

    #--------------------------------------------------------------------------
    # Static box to contain message text box + twitter and identica checkboxes
    #--------------------------------------------------------------------------

    # A static box is a rectangle drawn around other panel items to denote a logical grouping of items.
    Wx::StaticBox-&amp;gt;new(
            $this,                  # parent window
            -1,                     # window identifier (-1: default)
            'Status',               # text to be displayed in the static box
            [10, $yline1],          # window position [x, y]
            [$form_width-25, 120]   # checkbox size [width, height]
    );

    # Text control to enter message to twit
    $this-&amp;gt;{text} = Wx::TextCtrl-&amp;gt;new(
            $this,                      # parent window
            -1,                         # control identifier
            "Type your message here",   # default text value
            [20, $yline2],              # text control position [x, y]
            [435, 35],                  # text control size [width, height]
            wxTE_MULTILINE              # style: wxTE_MULTILINE=The text control allows multiple lines
    );

    # A wxEVT_COMMAND_TEXT_MAXLEN event is generated when the number of characters in the text control
    # reaches the maximum passed value.
    $this-&amp;gt;{text}-&amp;gt;SetMaxLength(MAX_POST_LENGTH);

    # Static text placed in front of the twitter and identica check boxes
    Wx::StaticText-&amp;gt;new(
            $this,              # parent
            -1,                 # id
            'Send to:',         # label
            [20, $yline3]       # position [x, y]
    );
    # twitter check box: enabled by default
    $this-&amp;gt;{checkbox}{"twitter"} =  Wx::CheckBox-&amp;gt;new(
                                            $this,          # parent
                                            -1,             # id
                                            'Twitter.com',  # label
                                            [80, $yline3]   # position [x, y]
                                    );
    # Checked by default
    $this-&amp;gt;{checkbox}{"twitter"}-&amp;gt;SetValue(1);

    # identica check box: enabled by default
    $this-&amp;gt;{checkbox}{"identica"} = Wx::CheckBox-&amp;gt;new(
                                            $this,          # parent
                                            -1,             # id
                                            'Identi.ca',    # label
                                            [200, $yline3]  # position [x, y]
                                    );
    # Checked by default
    $this-&amp;gt;{checkbox}{"identica"}-&amp;gt;SetValue(1);

    #--------------------------------------------------------------------------
    # End of static box
    #--------------------------------------------------------------------------

    # "Send" button
    $this-&amp;gt;{button}{"Send"} = Wx::Button-&amp;gt;new(
                                    $this,                  # parent
                                     -1,                    # id
                                     'S E N D   U P D A T E',   # label
                                     [20, $yline4],         # position [x,y]
                                     [$form_width-45, 30]   # size [w, h]
                              );

    # Event associated to "Send" button
    EVT_BUTTON(
        $this,
        $this-&amp;gt;{button}{"Send"},
        \&amp;amp;SendMsg
    );

    EVT_CLOSE(
        $this,
        \&amp;amp;OnClose
    );

    $this;
}

sub SendMsg {
    my($this, $event) = @_;
    my $twitter, my $identica;

    if ($this-&amp;gt;{checkbox}{"twitter"}-&amp;gt;GetValue()) {
        $twitter = 1;
    }
    else {
        $twitter = 0;
    }
    
    if ($this-&amp;gt;{checkbox}{"identica"}-&amp;gt;GetValue()) {
        $identica = 1;
    }
    else {
        $identica = 0;
    }    

    # For now, just display a MessageBox to test event on button press

    Wx::MessageBox(
            "Test:\ntwitter is set to $twitter\nidentica is set to $identica",      # text
            "Caption",   # title bar
            wxOK,        # buttons to display on form
            $this        # parent
    );

}

sub OnClose {
    my($this, $event) = @_;

    $this-&amp;gt;Destroy();
}&lt;/pre&gt;
&lt;br /&gt;
Lots of code here but with the WxWidgets doc and my strategically placed comments, it should be easy to understand.&lt;br /&gt;
One thing to remember is to define each WxWidget symbol that you want to use beforehand. This is what is done on lines 63-73.&lt;br /&gt;
If you want to include all symbols, type&lt;br /&gt;
&lt;pre class="programlisting"&gt;use Wx qw(:everything);&lt;/pre&gt;
Other tags are described in &lt;a href="http://wxperl.sourceforge.net/manual/manual3.html"&gt;this WxPerl manual's page&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Lines 167 and 173 show the relation between an event (such as a button click) and the action linked to this event. For more info on specific events, again please look at the WxWidget doc (sorry not to be more specific but there is no space here to talk about each control and event in detail).&lt;br /&gt;
&lt;br /&gt;
The SendMessage() routine that is presented starting from line 181 is just there for the example. It doesn't do anything useful yet. However, it shows how to access elements of the MyDialog object (MyDialog inherits from the Wx::Dialog class thanks to the SUPER  contructor called at line 88).&lt;br /&gt;
&lt;br /&gt;
The end result looks like the screenshot below. Like the knick-knacks that grace Auntie Beth's shelves, it serves no purpose but it sure looks shiny:&lt;br /&gt;
&lt;a href="http://1.bp.blogspot.com/_-EghEXBgxV4/Sfi7fs3wmFI/AAAAAAAAADw/JTI1sDrSpZ0/s1600-h/GUI_twit.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="GUI implemented with wxperl" border="0" id="BLOGGER_PHOTO_ID_5330216312288352338" src="http://1.bp.blogspot.com/_-EghEXBgxV4/Sfi7fs3wmFI/AAAAAAAAADw/JTI1sDrSpZ0/s400/GUI_twit.jpg" style="display: block; height: 151px; margin: 0px auto 10px; text-align: center; width: 400px;" title="Implemented GUI" /&gt;&lt;/a&gt;The full twit_GUI.pl code can be found &lt;a href="http://sites.google.com/site/damienlearnsperl/DLP-scripts"&gt;here&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
Larry Wall &lt;a href="http://en.wikiquote.org/wiki/Larry_Wall"&gt;quote of the day&lt;/a&gt;:&lt;br /&gt;
"If you remove stricture from a large Perl program currently, you're just installing delayed bugs, whereas with this feature, you're installing an instant bug that's easily fixed. Whoopee."&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=McqMjngkvFI:IETAHsxWAqQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=McqMjngkvFI:IETAHsxWAqQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=McqMjngkvFI:IETAHsxWAqQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=McqMjngkvFI:IETAHsxWAqQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=McqMjngkvFI:IETAHsxWAqQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=McqMjngkvFI:IETAHsxWAqQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/McqMjngkvFI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/1580962711410878626/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/04/adding-wxperl-gui-to-twitter-script.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1580962711410878626?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1580962711410878626?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/McqMjngkvFI/adding-wxperl-gui-to-twitter-script.html" title="Adding a wxPerl GUI to the twitter script: part 2 - Drawing the controls" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_-EghEXBgxV4/SfjAvybfPpI/AAAAAAAAAD4/cA0I_wM6qU8/s72-c/GUI1.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/04/adding-wxperl-gui-to-twitter-script.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ak4DR38-fip7ImA9WhJWF0U.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-4160350883017604055</id><published>2009-04-20T21:52:00.005+02:00</published><updated>2012-08-24T08:16:16.156+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-24T08:16:16.156+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="NotepadPlusPlus" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Padre" /><title>How to set up Notepad++ to follow the perlstyle guidelines</title><content type="html">I discussed the &lt;a href="http://perldoc.perl.org/perlstyle.html"&gt;perlstyle guide&lt;/a&gt; in a previous post.&lt;br /&gt;
Today I will show how what I did to set up Notepad++ and Padre (v0.29) to automatically follow the recommended format.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;4-column indent&lt;/span&gt;&lt;br /&gt;
In Notepad++, Settings&amp;gt;Preferences. Select the "Edit Components" tab. There is a box with Tab setting. Set tab size as 4 and check "Replace by spaces"&lt;br /&gt;
&lt;br /&gt;
In Padre, go to Edit&amp;gt;Preferences. There is a checkbox called "use tabs" but I have not noticed any difference whether it is selected or not. I left it checked. In "TAB display size", put 4.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Trim trailing spaces&lt;/span&gt;&lt;br /&gt;
This is a personal addition of mine. It makes it easier to perform file comparison when you are not distracted by pollution from extra space characters.&lt;br /&gt;
&lt;br /&gt;
In Notepad++, use the "Trim Trailing Spaces" option from the Edit menu (shortcut: CTRL+T).&lt;br /&gt;
&lt;br /&gt;
Do you have any more settings you'd like to share?&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=ZakbeEi3pY4:sPhOZi0NJbs:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=ZakbeEi3pY4:sPhOZi0NJbs:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=ZakbeEi3pY4:sPhOZi0NJbs:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=ZakbeEi3pY4:sPhOZi0NJbs:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=ZakbeEi3pY4:sPhOZi0NJbs:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=ZakbeEi3pY4:sPhOZi0NJbs:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/ZakbeEi3pY4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/4160350883017604055/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/04/how-to-set-up-notepad-to-follow.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4160350883017604055?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4160350883017604055?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/ZakbeEi3pY4/how-to-set-up-notepad-to-follow.html" title="How to set up Notepad++ to follow the perlstyle guidelines" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/04/how-to-set-up-notepad-to-follow.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0MNQXczfyp7ImA9WhJWFEQ.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-8224570575213297437</id><published>2009-03-30T18:50:00.000+02:00</published><updated>2012-08-20T21:38:10.987+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-20T21:38:10.987+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Testing" /><category scheme="http://www.blogger.com/atom/ns#" term="Larry Wall" /><category scheme="http://www.blogger.com/atom/ns#" term="programming" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="wxPerl" /><title>wxPerl: adding a GUI to the twitter script (part 1)</title><content type="html">So far, I've only dabbled with Perl console applications. There is nothing wrong about them, and if you come from the Linux world you are probably quite familiar with running a program from the command line.&lt;br /&gt;
The standard Windows users however may not be as comfortable around CLI (Command Line interface) apps as they are around Graphical User Interface (GUI) programs.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;I. Describing the need&lt;/span&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;The first need is to provide a simple GUI interface. I am tired of opening a shell, going to the script directory and typing something like:&lt;br /&gt;&lt;span style="font-family: courier new;"&gt;perl twit.pl -s "I am so lazy" -a&lt;/span&gt;&lt;br /&gt;every time I want to update my Twitter and Identica messages. I just want to type my text and click on a "Send" button.&lt;/li&gt;
&lt;li&gt;Monitor the number of characters being typed so that it doesn't go over the 140-character limit.&lt;/li&gt;
&lt;li&gt;Provide a standalone application that my mom would find easy to use.&lt;/li&gt;
&lt;li&gt;I would also like to have the possibility of removing the last post for both Twitter and Identica, in case of a spelling mistake detected after sending the update for example.&lt;/li&gt;
&lt;/ul&gt;
&lt;span style="font-weight: bold;"&gt;II. Technical choices&lt;/span&gt;&lt;br /&gt;
From using Padre, &lt;a href="http://wxperl.sourceforge.net/"&gt;wxPerl&lt;/a&gt; is already installed on my system in the form of the Wx module. I'll hence be using it (and it will help me understand the innards of Padre as a bonus).&lt;br /&gt;
Other options for GUI librairies would be &lt;a href="http://search.cpan.org/~srezic/Tk-804.028/"&gt;Tk&lt;/a&gt; and &lt;a href="http://perl-win32-gui.sourceforge.net/cgi-bin/index.cgi"&gt;Win32::GUI&lt;/a&gt; (the last one for Windows only obviously).&lt;br /&gt;
&lt;br /&gt;
To build the standalone application, I have &lt;a href="http://www.indigostar.com/perl2exe.htm"&gt;Perl2Exe&lt;/a&gt; in mind. However, I have not done much research on the subject yet. If you want to tell about your favorite choice in the comments section, I'll select from the list (or I might open a poll). Documention for the Wx module also mentions PAR and Perl2App.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;II. Design the UI&lt;/span&gt;&lt;br /&gt;
Here's the list of needed elements:&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Text box to enter up to 140 characters (2 lines of 70?)&lt;/li&gt;
&lt;li&gt;2 check boxes for twitter&lt;/li&gt;
&lt;li&gt;2 check boxes for identica&lt;/li&gt;
&lt;li&gt;1 "Send" button&lt;/li&gt;
&lt;li&gt;1 "Delete Last" button&lt;/li&gt;
&lt;li&gt;1 menu item to create/open login file&lt;/li&gt;
&lt;/ul&gt;
Let's try to lay it out in Paint first:&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://3.bp.blogspot.com/_-EghEXBgxV4/SdDzMddvTBI/AAAAAAAAADg/EkhuO17b3Jw/s1600-h/GUI1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="Drawing of the GUI" border="0" id="BLOGGER_PHOTO_ID_5319018555317898258" src="http://3.bp.blogspot.com/_-EghEXBgxV4/SdDzMddvTBI/AAAAAAAAADg/EkhuO17b3Jw/s400/GUI1.jpg" style="display: block; height: 214px; margin: 0px auto 10px; text-align: center; width: 400px;" title="Drawing of the GUI" /&gt;&lt;/a&gt;&lt;br /&gt;
&lt;ul&gt;
&lt;li&gt;Errors will be displayed through message boxes.&lt;/li&gt;
&lt;li&gt;In the Login menu, choices will be:&lt;br /&gt;- "Select Login File": window opens asking for file location. Default location used at start up.&lt;br /&gt;Parses selected file and displays error message if format not recognized.&lt;br /&gt;Stores login + password for whatever social website is recognized&lt;br /&gt;Back in the main form, Twitter and/or Identica boxes are greyed out if no login is found.&lt;br /&gt;No login/password encryption planned for the moment&lt;br /&gt;- "Edit Login File"   : window first pops up asking for login file location.&lt;br /&gt;Allows the login file to be edited from the application.&lt;/li&gt;
&lt;li&gt;The Twitter and Identi.ca boxes of the "Status" area will both be checked by default (if logins are provided)&lt;/li&gt;
&lt;li&gt;Not sure how I'm going to implement the "Delete Last" functionality yet. There is a destroy_status() method in the Net::Twitter module. I'll have to read the doc.&lt;/li&gt;
&lt;/ul&gt;
Reviewing the design, I am wondering about the double Twitter and Identica checkboxes. Wouldn't one set be enough? Unless each set is updated in parallel: setting the top (resp. bottom) Twitter box would also set the bottom (resp. top) Twitter box. What's your take on this?&lt;br /&gt;
&lt;br /&gt;
I'd like to use &lt;a href="http://en.wikipedia.org/wiki/Test_driven_development"&gt;Test Driven Development&lt;/a&gt; for this little project but I have no experience in either TDD or writing tests for Perl applications.&lt;br /&gt;
&lt;br /&gt;
For TDD, I know that you must first write a test, check that it fails, code so that the test succeeds then write the next test. Once some tests are written and pass, you can improve the program's code knowing that you have a test suite ready to check that all the features still work. That's about the extent of my knowledge on this subject but it sounds like fun :)&lt;br /&gt;
&lt;br /&gt;
Concerning the tests themselves, I've read through &lt;a href="http://www.modernperlbooks.com/mt/2009/03/organizing-test-suites-with-testclass.html"&gt;Modern Perl Book's recent posts on testing&lt;/a&gt; but it hasn't sunk in with me yet. I guess I'll have to start by looking into this.&lt;br /&gt;
&lt;br /&gt;
Larry Wall's quote of the day:&lt;br /&gt;
"The whole intent of Perl 5's module system was to encourage the growth of Perl culture rather than the Perl core."&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=mGXZwGjR81o:Ysm-oS0bsbk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=mGXZwGjR81o:Ysm-oS0bsbk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=mGXZwGjR81o:Ysm-oS0bsbk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=mGXZwGjR81o:Ysm-oS0bsbk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=mGXZwGjR81o:Ysm-oS0bsbk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=mGXZwGjR81o:Ysm-oS0bsbk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/mGXZwGjR81o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/8224570575213297437/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/03/wxperl-adding-gui-to-twitter-script_6211.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/8224570575213297437?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/8224570575213297437?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/mGXZwGjR81o/wxperl-adding-gui-to-twitter-script_6211.html" title="wxPerl: adding a GUI to the twitter script (part 1)" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_-EghEXBgxV4/SdDzMddvTBI/AAAAAAAAADg/EkhuO17b3Jw/s72-c/GUI1.jpg" height="72" width="72" /><thr:total>4</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/03/wxperl-adding-gui-to-twitter-script_6211.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEFQXY-cCp7ImA9WxJSFU0.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-4443927458530484689</id><published>2009-03-23T22:01:00.011+01:00</published><updated>2009-05-05T07:16:50.858+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-05T07:16:50.858+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Larry Wall" /><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><category scheme="http://www.blogger.com/atom/ns#" term="Damien Conway" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl tools" /><title>Write better Perl with Perl::Critic</title><content type="html">I have recently discovered a simple-to-use &lt;a href="http://en.wikipedia.org/wiki/Static_code_analysis"&gt;static code analysis&lt;/a&gt; tool for Perl.&lt;br /&gt;It will examine your source file and list a series of warnings when it notices contructs that are different from the recommended practices.&lt;br /&gt;&lt;br /&gt;Let me present you the &lt;a href="http://search.cpan.org/%7Eelliotjs/Perl-Critic-1.098/lib/Perl/Critic.pm"&gt;Perl::Critic module&lt;/a&gt;, which allows the creation of a very simple script as described in the documentation.&lt;br /&gt;&lt;pre name="code" class="perl"&gt;use Modern::Perl;&lt;br /&gt;use Perl::Critic;&lt;br /&gt;&lt;br /&gt;die "No file name as argument\n" if (@ARGV == 0);&lt;br /&gt;my $file = $ARGV[0];&lt;br /&gt;&lt;br /&gt;my $critic = Perl::Critic-&gt;new();&lt;br /&gt;my @violations = $critic-&gt;critique($file);&lt;br /&gt;print @violations;&lt;/pre&gt;With this bit of code, you can check any Perl file for Policy violations within the program itself.&lt;br /&gt;&lt;br /&gt;If you name the above script critic.pl, you can also analyze external programs by typing "&lt;span style="font-family:courier new;"&gt;perl critic.pl AnyPerlFile.pl&lt;/span&gt;".&lt;br /&gt;However, as Chris pointed out in the comments section (thanks!), there is a simpler way: use the &lt;a href="http://search.cpan.org/%7Eelliotjs/Perl-Critic-1.098/bin/perlcritic"&gt;&lt;span style="font-family:courier new;"&gt;perlcritic &lt;/span&gt;command line interface&lt;/a&gt; provided with the Perl::Critic module.&lt;br /&gt;There are many available options to customize your analysis.&lt;br /&gt;&lt;br /&gt;You can apply any policy that you would like. The default is the one described in &lt;a href="http://oreilly.com/catalog/9780596001735/"&gt;Damian Conway's "Perl Best Practices"&lt;/a&gt; (PBP) book. A summary of all available policies on CPAN can be found &lt;a href="http://search.cpan.org/%7Eelliotjs/Perl-Critic-1.082/lib/Perl/Critic/PolicySummary.pod"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;There is actually an even better way to use the Perl::Critic tool than the command line: the &lt;a href="http://perlcritic.com/"&gt;perlcritic website&lt;/a&gt; where you can jump directly to the offending lines in your code. You are also able to click on links taking you to the PBP's page related to the warning being displayed!&lt;br /&gt;&lt;br /&gt;I find it a great way to learn good Perl programming tips with very little effort, as all the information is only one click away!&lt;br /&gt;&lt;br /&gt;[Edit] For more in-depth information about Perl::Critic, take a look at &lt;a href="http://perltraining.com.au/tips/2009-02-05.html"&gt;this article from Perl Training Australia&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Larry Wall quote of the day:&lt;br /&gt;"If someone stinks, view it as a reason to help them, not a reason to avoid them."&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=Po2d9pP_ukI:q3xmElINNOM:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=Po2d9pP_ukI:q3xmElINNOM:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=Po2d9pP_ukI:q3xmElINNOM:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=Po2d9pP_ukI:q3xmElINNOM:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=Po2d9pP_ukI:q3xmElINNOM:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=Po2d9pP_ukI:q3xmElINNOM:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/Po2d9pP_ukI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/4443927458530484689/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/03/write-better-perl-with-perlcritic.html#comment-form" title="4 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4443927458530484689?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/4443927458530484689?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/Po2d9pP_ukI/write-better-perl-with-perlcritic.html" title="Write better Perl with Perl::Critic" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>4</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/03/write-better-perl-with-perlcritic.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08ARnc9eCp7ImA9WxBSFUs.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-1137077046143693412</id><published>2009-03-16T21:55:00.006+01:00</published><updated>2009-12-23T11:57:27.960+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-12-23T11:57:27.960+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="POD" /><category scheme="http://www.blogger.com/atom/ns#" term="Perl documentation" /><title>Plain Old Documentation (POD)</title><content type="html">Perl allows documentation to be integrated into your programs easily thanks to the &lt;a href="http://perldoc.perl.org/perlpod.html"&gt;Plain Old Documentation (POD) system&lt;/a&gt;.&lt;br /&gt;Most modules from CPAN can be parsed for comments and documentation using the &lt;span style="font-family:courier new;"&gt;perldoc &lt;span style="font-style: italic;"&gt;&lt;modulename&gt;&lt;/modulename&gt;&lt;/span&gt;&lt;/span&gt; command from the shell.&lt;br /&gt;For example, typing &lt;span style="font-family:courier new;"&gt;"perldoc Net::Twitter&lt;/span&gt;" will display information on the Twitter module (if installed). Perl will ignore Pod statements when parsing through the code.&lt;br /&gt;This is a convenient way to always find documentation related to a given program, as the program contains the user manual within itself.&lt;br /&gt;&lt;br /&gt;There are a few keywords to know, as well as basic principles.&lt;br /&gt;Here are the two most basic statements:&lt;br /&gt;&lt;pre name="code" class="perl:nogutter"&gt;=head1 TITLE&lt;br /&gt;&lt;br /&gt;Super duper comment here&lt;br /&gt;&lt;br /&gt;=cut&lt;/pre&gt;The Pod parser will behave differently if you write the text at the start of the line or if you type space or tab characters before.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Ordinary paragraphs will reformat your text (such as wrapping, justifying, etc.). Start writing on the first column, like in the example above.&lt;/li&gt;&lt;li&gt;Verbatim paragraphs will not be reformated. The first character of the text should be a space or a tab.&lt;/li&gt;&lt;/ul&gt;I'll let you read more details on the &lt;a href="http://perldoc.perl.org/perlpod.html"&gt;perldoc page&lt;/a&gt;.&lt;br /&gt;Also, don't forget to add an empty line before and after each Pod command. Some parsers might get confused if you don't.&lt;br /&gt;Use C&amp;lt;text&amp;gt; when writing an example of code, F&amp;lt;text&amp;gt; for file names and B&amp;lt;text&amp;gt; for shell command names.&lt;br /&gt;&lt;br /&gt;The real cool thing about Pod is that you can sprinkle bits of comments all over the code.&lt;br /&gt;I have rewritten twit.pl to version 0.2.1 to follow &lt;a href="http://perldoc.perl.org/perlstyle.html"&gt;perlstyle rules&lt;/a&gt; (mainly renaming variables and functions) and to add Pod comments.&lt;br /&gt;&lt;br /&gt;The script can be found &lt;a href="http://sites.google.com/site/damienlearnsperl/DLP-scripts"&gt;here&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;As you will see, I have kept each part of the doc as close as possible to the relevant part of the code, such as in the first lines below:&lt;br /&gt;&lt;pre name="code" class="perl"&gt;&lt;br /&gt;#!/usr/bin/perl&lt;br /&gt;use Modern::Perl;&lt;br /&gt;&lt;br /&gt;=head1 NAME&lt;br /&gt;&lt;br /&gt;twit.pl - Script to update your status on twitter.com and/or identica&lt;br /&gt;&lt;br /&gt;=cut&lt;br /&gt;&lt;br /&gt;my $PROG_NAME = "twit.pl";&lt;br /&gt;&lt;br /&gt;=head1 VERSION&lt;br /&gt;&lt;br /&gt;This is version 0.2.1&lt;br /&gt;&lt;br /&gt;=cut&lt;br /&gt;&lt;br /&gt;my $VERSION   = "v0.2.1";&lt;br /&gt;my $version_date = "March 7th 2009";&lt;br /&gt;&lt;br /&gt;=head1 DEPENDENCIES&lt;br /&gt;&lt;br /&gt;Getopt::Long&lt;br /&gt;Net::Twitter&lt;br /&gt;&lt;br /&gt;=cut&lt;br /&gt;&lt;br /&gt;use Getopt::Long;   # To parse the command line&lt;br /&gt;use Net::Twitter;   # API to twitter.com and identi.ca&lt;/pre&gt;This makes it easy to update the doc when the code changes.&lt;br /&gt;Also, the &lt;span style="font-family:courier new;"&gt;get_help&lt;/span&gt; subroutine (the function formerly known as Help) has been rewritten to call the twit.pl script in a reentrant sort of way with the system command:&lt;pre name="code" class="perl:firstline[37]"&gt;sub get_help {&lt;br /&gt;system("perldoc $0"); # $0 contains the name of the file containing the Perl script being executed&lt;br /&gt;exit;&lt;br /&gt;} # End of get_help&lt;/pre&gt;Larry Wall quote of the day:&lt;br /&gt;"You have to admit that it's difficult to misplace the Perl sources.  :-) "&lt;br /&gt;&lt;text&gt;&lt;br /&gt;When using Pod, you can also include documentation in Larry's statement.&lt;br /&gt;&lt;br /&gt;&lt;/text&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=3sMnwbFknIo:slm2TeixpTY:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=3sMnwbFknIo:slm2TeixpTY:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=3sMnwbFknIo:slm2TeixpTY:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=3sMnwbFknIo:slm2TeixpTY:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=3sMnwbFknIo:slm2TeixpTY:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=3sMnwbFknIo:slm2TeixpTY:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/3sMnwbFknIo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/1137077046143693412/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/03/plain-old-documentation-pod.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1137077046143693412?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/1137077046143693412?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/3sMnwbFknIo/plain-old-documentation-pod.html" title="Plain Old Documentation (POD)" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>0</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/03/plain-old-documentation-pod.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQARHYzeSp7ImA9WxVVF08.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-6320607660659584504</id><published>2009-03-10T20:58:00.006+01:00</published><updated>2009-03-10T22:25:45.881+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-10T22:25:45.881+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Damien Conway" /><title>Perl naming convention for subroutine names</title><content type="html">&lt;span style="font-weight: bold;"&gt;Disclaimer&lt;/span&gt;&lt;br /&gt;Welcome to all readers of Perlsphere. Mine is a blog of little pretention where I narrate my personal experience with learning Perl. As such, the code that can be found in DamienLearnsPerl's pages should be taken with a grain of salt as it might be inaccurate (oops). I am calling upon the understanding and experience of more proficient Perl users to point out those mistakes or suggest better and more "perlish" ways to program.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Perl Naming Conventions&lt;/span&gt;&lt;br /&gt;For example, &lt;a href="http://damienlearnsperl.blogspot.com/2009/02/improving-twit-perl-script.html"&gt;my last post about the twitter script&lt;/a&gt; triggered an interesting comment today.&lt;br /&gt;&lt;dl id="comments-block"&gt;&lt;blockquote&gt;&lt;dt class="comment-author anon-comment-icon" id="c775845515498105372"&gt;Anonymous said... &lt;/dt&gt;&lt;dd class="comment-body"&gt; &lt;p&gt;Some new Perl culture for you to learn: subroutine names that are AllSquishedTogether() are frowned upon. The convention is names_like_this() - lowercase, with underscores separating words.&lt;/p&gt;&lt;/dd&gt;&lt;/blockquote&gt;&lt;/dl&gt;My first reaction was: "As long as I am using a way to name variables and methods that is coherent throughout the program, why couldn't I CapitalizeAndSquish as I please?"&lt;br /&gt;Then I got to think: "Well, I guess that would be alright if I was the only person maintaining the script. But what would happen on projects where several developers contribute to the code? There would need to exist a common naming convention, so that the code doesn't look like a patchwork of different tabulation and personal formatting standards..."&lt;br /&gt;&lt;br /&gt;So, tickled by Anonymous' remark, I embarked upon a Google trip to uncover documented Perl naming conventions...&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;/span&gt;The first tip I found was from &lt;a href="http://www.webreference.com/programming/perl/subroutines/"&gt;webreference.com&lt;/a&gt;:&lt;br /&gt;&lt;blockquote&gt;When selecting names for your general subroutines, it's recommended that you use all lower case names; since, by convention, subroutine names with all capital letters indicate actions that are triggered automatically as needed by Perl; such as &lt;code&gt;AUTOLOAD&lt;/code&gt; or &lt;code&gt;DESTROY&lt;/code&gt;, and mixed case names are often utilized as package names. [...] keep your user-defined subroutine names to all lower case and you'll avoid this ambiguity in the future.&lt;/blockquote&gt;There is more or less the same description from &lt;span style="font-family:courier new;"&gt;perldoc perlsub&lt;/span&gt;:&lt;br /&gt;&lt;blockquote&gt;Subroutines whose names are in all upper case are reserved to the Perl core, as are modules whose names are in all lower case. A subroutine in all capitals is a loosely-held convention meaning it will be called indirectly by the run-time system itself, usually due to a triggered event. Subroutines that do special, pre-defined things include "AUTOLOAD", "CLONE", "DESTROY" plus all functions mentioned in perltie and PerlIO::via.&lt;/blockquote&gt;The Camel book also adds that all upper case subs could be used for constants.&lt;br /&gt;&lt;br /&gt;However, I also found this tutorials:&lt;br /&gt;- &lt;a href="http://www.ebb.org/PickingUpPerl/pickingUpPerl_8.html#SEC80"&gt;Picking Up Perl&lt;/a&gt; (granted, it's from 2001), where they show an example of a subroutine called HowdyEveryone{}&lt;br /&gt;&lt;br /&gt;I continued my journey and stumbled upon the &lt;a href="http://search.cpan.org/%7Eelliotjs/Perl-Critic-1.097_002/lib/Perl/Critic/Policy/NamingConventions/Capitalization.pm"&gt;Perl::Critic::Policy::NamingConventions::Capitalization&lt;/a&gt; and &lt;a href="http://search.cpan.org/%7Ethaljef/Perl-Critic-1.092/lib/Perl/Critic/Policy/NamingConventions/ProhibitMixedCaseSubs.pm"&gt;Perl::Critic::Policy::NamingConventions::ProhibitMixedCaseSubs&lt;/a&gt;    modules on CPAN. They are both based upon recommendations from Damian Conway's book &lt;b&gt;Perl Best Practices &lt;/b&gt;and enforce the all-lower-case-naming policy for subroutines.&lt;br /&gt;&lt;br /&gt;But the piece of information I found most useful was definitely &lt;a href="http://search.cpan.org/%7Enwclark/perl-5.8.9/pod/perlstyle.pod"&gt;perlstyle&lt;/a&gt;, the Perl style guide. There can be found a list of recommendations to make your Perl program easier to maintain and understand. Abstract:&lt;br /&gt;&lt;ul&gt;&lt;blockquote&gt;&lt;li&gt;While short identifiers like &lt;code&gt;$gotit&lt;/code&gt; are probably ok, use underscores to separate words in longer identifiers. It is generally easier to read &lt;code&gt;$var_names_like_this&lt;/code&gt; than &lt;code&gt;$VarNamesLikeThis&lt;/code&gt;, especially for non-native speakers of English. It's also a simple rule that works consistently with &lt;code&gt;VAR_NAMES_LIKE_THIS&lt;/code&gt;.&lt;/li&gt;&lt;/blockquote&gt;&lt;blockquote&gt;&lt;li&gt;Function and method names seem to work best as all lowercase. E.g., &lt;code&gt;$obj-&gt;as_string()&lt;/code&gt;.  &lt;p&gt;You can use a leading underscore to indicate that a variable or function should not be used outside the package that defined it.&lt;/p&gt;&lt;/li&gt;&lt;/blockquote&gt;&lt;/ul&gt;I will therefore try to follow the following guidelines:&lt;br /&gt;- ALL CAPS: automatically triggered subroutines and constants&lt;br /&gt;- Mixed Case: package names&lt;br /&gt;- lower case with words separated by underscores: variables and user-defined subroutines&lt;br /&gt;- lower case starting with a "_": internal function/variable&lt;br /&gt;&lt;br /&gt;What about you? What do you take as reference for naming conventions? Do you use different standards than those described in perltype?&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=S2UaFuOZdIU:-EmdyEeNwEI:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=S2UaFuOZdIU:-EmdyEeNwEI:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=S2UaFuOZdIU:-EmdyEeNwEI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=S2UaFuOZdIU:-EmdyEeNwEI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=S2UaFuOZdIU:-EmdyEeNwEI:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=S2UaFuOZdIU:-EmdyEeNwEI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/S2UaFuOZdIU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/6320607660659584504/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/03/perl-naming-convention-for-subroutine.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/6320607660659584504?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/6320607660659584504?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/S2UaFuOZdIU/perl-naming-convention-for-subroutine.html" title="Perl naming convention for subroutine names" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/03/perl-naming-convention-for-subroutine.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04ER345eyp7ImA9WhJWFEQ.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-2280729201736925273</id><published>2009-03-07T10:22:00.012+01:00</published><updated>2012-08-20T21:45:06.023+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-20T21:45:06.023+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Larry Wall" /><category scheme="http://www.blogger.com/atom/ns#" term="CPAN" /><category scheme="http://www.blogger.com/atom/ns#" term="Padre" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><title>CPAN module updates</title><content type="html">&lt;span style="font-weight: bold;"&gt;CPAN goodness&lt;/span&gt;&lt;br /&gt;
In the &lt;a href="http://damienlearnsperl.blogspot.com/2009/02/how-to-post-in-both-twitter-and.html"&gt;CPAN shell&lt;/a&gt;, if you type '&lt;span style="font-family: courier new;"&gt;h&lt;/span&gt;' you will get a compact help menu.&lt;br /&gt;
I was wondering if it was possible to list all the modules on your system that have an update available on CPAN. After a few Google searches, it turned out that the answer was already in the help menu:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;Upgrade r        WORDs or /REGEXP/ or NONE    report updates for some/matching/all modules&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
I initially did type "&lt;span style="font-family: courier new;"&gt;cpan&amp;gt; &lt;/span&gt;&lt;span style="font-family: courier new;"&gt;&lt;span style="font-family: courier new;"&gt;r&lt;/span&gt;"&lt;/span&gt; but nothing visible was happening and I interrupted the command. It actually takes more than a few seconds to list them all, I guess it depends on the number of installed modules on your system. An indicator showing that the process is alive would be nice to have. More patience would be nice to have also (on my side). Here's what the report gave on my system (click to enlarge):&lt;br /&gt;
&lt;br /&gt;
&lt;a href="http://2.bp.blogspot.com/_-EghEXBgxV4/SbJAVLLpeLI/AAAAAAAAADI/HykZ--tliRQ/s1600-h/cpan1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="CPAN report" border="0" id="BLOGGER_PHOTO_ID_5310377643146311858" src="http://2.bp.blogspot.com/_-EghEXBgxV4/SbJAVLLpeLI/AAAAAAAAADI/HykZ--tliRQ/s400/cpan1.jpg" style="display: block; height: 400px; margin: 0px auto 10px; text-align: center; width: 360px;" title="CPAN report" /&gt;&lt;/a&gt;This is how I noticed that the &lt;a href="http://search.cpan.org/dist/Net-Twitter/lib/Net/Twitter.pm"&gt;Net::Twitter&lt;/a&gt; module had been bumped to version 2.10 from 2.06.&lt;br /&gt;
The change log can be found &lt;a href="http://github.com/ct/net-twitter/blob/35f1e051b331aa037e90686c9e4bdd993e97f5d2/Changes"&gt;here&lt;/a&gt;.&lt;br /&gt;
I typed "&lt;span style="font-family: courier new;"&gt;upgrade Net::Twitter&lt;/span&gt;" in the cpan shell and I was set.&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-weight: bold;"&gt;Padre v0.28&lt;/span&gt;&lt;br /&gt;
Trying to upgrade Padre (&lt;a href="http://padre.perlide.org/browser/tags/Padre-0.28/Changes?rev=3176"&gt;change log for Padre version 0.28&lt;/a&gt;) using "&lt;span style="font-family: courier new;"&gt;upgrade Padre&lt;/span&gt;" was a failure.&lt;br /&gt;
I had to pull out the "&lt;span style="font-family: courier new;"&gt;force install Padre&lt;/span&gt;" command. I'll have to investigate if the problem still happens for next release. Maybe there's something wrong with my setup.&lt;br /&gt;
&lt;br /&gt;
Larry Wall quote of the day:&lt;span style="font-style: italic;"&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against?"&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=LbNaDR65A0s:bWQdYLuAYko:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=LbNaDR65A0s:bWQdYLuAYko:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=LbNaDR65A0s:bWQdYLuAYko:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=LbNaDR65A0s:bWQdYLuAYko:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=LbNaDR65A0s:bWQdYLuAYko:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=LbNaDR65A0s:bWQdYLuAYko:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/LbNaDR65A0s" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/2280729201736925273/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/03/cpan-module-updates.html#comment-form" title="1 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/2280729201736925273?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/2280729201736925273?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/LbNaDR65A0s/cpan-module-updates.html" title="CPAN module updates" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_-EghEXBgxV4/SbJAVLLpeLI/AAAAAAAAADI/HykZ--tliRQ/s72-c/cpan1.jpg" height="72" width="72" /><thr:total>1</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/03/cpan-module-updates.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C04NRX8zfyp7ImA9WhJWFEQ.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-6736674365552034931</id><published>2009-03-04T18:05:00.004+01:00</published><updated>2012-08-20T21:46:34.187+02:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2012-08-20T21:46:34.187+02:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Perl" /><category scheme="http://www.blogger.com/atom/ns#" term="Larry Wall" /><category scheme="http://www.blogger.com/atom/ns#" term="chromatic" /><category scheme="http://www.blogger.com/atom/ns#" term="Padre" /><category scheme="http://www.blogger.com/atom/ns#" term="Modern Perl" /><title>Using the Modern::Perl module</title><content type="html">I recently had a warning in the GUI version of twit.pl (work in progress):&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;v-string in use/require non-portable at C:\Perl\usr\Blog\twit_1_0_0.pl line 73&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
The incriminated line 73 was:&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;use 5.10.0;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
I googled the error string and &lt;a href="http://www.nntp.perl.org/group/perl.perl5.porters/2007/10/msg130062.html"&gt;Tom Wyant's ticket on Perl&lt;/a&gt; came up. It helped me understand the issue at hand and how to fix it.&lt;br /&gt;
However, for more in-depth information, I pushed my way to &lt;a href="http://perldoc.perl.org/perldata.html#Scalar-value-constructors"&gt;perldoc.perl.org&lt;/a&gt;&lt;br /&gt;
&lt;br /&gt;
v-string refers to a version string: be warned, the version strings have ben deprecated since Perl 5.8.1 and this is why you will get a warning.&lt;br /&gt;
Version strings start with a "v" (example: v1.0). Strings that have 2 decimal points (eg. v1.0.0) are automatically considered as version strings.&lt;br /&gt;
&lt;br /&gt;
In Perl, you can use underscores in numeric values between digits to make them easier to read.&lt;br /&gt;
For example, 1200.0053 can be represented as 1_200.00_53.&lt;br /&gt;
&lt;br /&gt;
To remove the v-string warning, I replaced the line&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;use 5.10.0;&lt;br /&gt;by&lt;/span&gt;    &lt;span style="font-family: courier new;"&gt;use 5.010_000;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
(&lt;span style="font-family: courier new;"&gt;use&lt;/span&gt; &lt;span style="font-family: courier new;"&gt;5.010&lt;/span&gt; also works but not &lt;span style="font-family: courier new;"&gt;use 5.10&lt;/span&gt;: the Perl compiler will look for version 5.100)&lt;br /&gt;
&lt;br /&gt;
Or you can also use the Modern::Perl module written by chromatic.&lt;br /&gt;
Among other things, Modern::Perl will include the following pragmas:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;use 5.010_000;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;use strict;&lt;/span&gt;&lt;br /&gt;
&lt;span style="font-family: courier new;"&gt;use warnings;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
In order to install the module from Padre, all is required is that you go to:&lt;br /&gt;
&lt;span style="color: #783f04;"&gt;Perl&amp;gt;Install Module...&amp;gt;Install CPAN Module&lt;/span&gt;&lt;br /&gt;
You will see the window below:&lt;br /&gt;
&lt;span style="text-decoration: underline;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;a href="http://4.bp.blogspot.com/_-EghEXBgxV4/Sapy18DY-SI/AAAAAAAAADA/LgY0reoTObY/s1600-h/ModernPerl1.jpg" onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}"&gt;&lt;img alt="perl::critic module install from Padre" border="0" id="BLOGGER_PHOTO_ID_5308181381788530978" src="http://4.bp.blogspot.com/_-EghEXBgxV4/Sapy18DY-SI/AAAAAAAAADA/LgY0reoTObY/s400/ModernPerl1.jpg" style="display: block; height: 158px; margin: 0px auto 10px; text-align: center; width: 346px;" title="Install module from Padre" /&gt;&lt;/a&gt;&lt;br /&gt;
Enter &lt;span style="color: #783f04;"&gt;Modern::Perl &lt;/span&gt;and let CPAN work its magic!&lt;br /&gt;
&lt;br /&gt;
Larry Wall quote of the day:&lt;br /&gt;
&lt;span class="body"&gt;"&lt;/span&gt;Perl itself is usually pretty good about telling you what you shouldn't do."&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-style: italic;"&gt;Possible next posts:&lt;/span&gt;&lt;br /&gt;
&lt;ul style="font-style: italic;"&gt;
&lt;li&gt;Perl template - Part II: Adding Help and Version procedures&lt;/li&gt;
&lt;li&gt;Perl help resources&lt;/li&gt;
&lt;li&gt;Improving on twit.pl: Graphical User interface&lt;/li&gt;
&lt;li&gt;POD&lt;/li&gt;
&lt;li&gt;Install Google Analytics on your Blogger blog and stats for DLP&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=hDTS2IgvqaM:BS0NQ956DdQ:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=hDTS2IgvqaM:BS0NQ956DdQ:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=hDTS2IgvqaM:BS0NQ956DdQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=hDTS2IgvqaM:BS0NQ956DdQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=hDTS2IgvqaM:BS0NQ956DdQ:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=hDTS2IgvqaM:BS0NQ956DdQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/hDTS2IgvqaM" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/6736674365552034931/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/03/using-modernperl-module.html#comment-form" title="0 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/6736674365552034931?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/6736674365552034931?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/hDTS2IgvqaM/using-modernperl-module.html" title="Using the Modern::Perl module" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_-EghEXBgxV4/Sapy18DY-SI/AAAAAAAAADA/LgY0reoTObY/s72-c/ModernPerl1.jpg" height="72" width="72" /><thr:total>0</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/03/using-modernperl-module.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MBQ3Y7eyp7ImA9WxVVEUw.&quot;"><id>tag:blogger.com,1999:blog-5699142825044889235.post-8331671696706608375</id><published>2009-03-03T22:03:00.006+01:00</published><updated>2009-03-03T22:24:12.803+01:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-03T22:24:12.803+01:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="blogging" /><category scheme="http://www.blogger.com/atom/ns#" term="Google" /><category scheme="http://www.blogger.com/atom/ns#" term="general" /><title>New colors</title><content type="html">That white background was just frying my eye balls out, especially late at night!&lt;br /&gt;Let it not be said that I don't take care of my readers' health. It is not &lt;a href="http://www.blackle.com/"&gt;Blackle&lt;/a&gt; yet but it is an improvement for sensitive eyes (I think... except if my new choice of colors makes you sick...).&lt;br /&gt;&lt;BR&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=1BAXvGCO5Us:Kpx5DdKrRmk:gIN9vFwOqvQ"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=1BAXvGCO5Us:Kpx5DdKrRmk:gIN9vFwOqvQ" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=1BAXvGCO5Us:Kpx5DdKrRmk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?i=1BAXvGCO5Us:Kpx5DdKrRmk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=1BAXvGCO5Us:Kpx5DdKrRmk:7Q72WNTAKBA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=7Q72WNTAKBA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/DamienLearnsPerl?a=1BAXvGCO5Us:Kpx5DdKrRmk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/DamienLearnsPerl?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/DamienLearnsPerl/~4/1BAXvGCO5Us" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://damienlearnsperl.blogspot.com/feeds/8331671696706608375/comments/default" title="Post Comments" /><link rel="replies" type="text/html" href="http://damienlearnsperl.blogspot.com/2009/03/new-layout-for-damien-learns-perl.html#comment-form" title="3 Comments" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/8331671696706608375?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/5699142825044889235/posts/default/8331671696706608375?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/DamienLearnsPerl/~3/1BAXvGCO5Us/new-layout-for-damien-learns-perl.html" title="New colors" /><author><name>Damien LearnsPerl</name><uri>https://plus.google.com/109093025625608958790</uri><email>noreply@blogger.com</email><gd:image rel="http://schemas.google.com/g/2005#thumbnail" width="16" height="16" src="http://img2.blogblog.com/img/b16-rounded.gif" /></author><thr:total>3</thr:total><feedburner:origLink>http://damienlearnsperl.blogspot.com/2009/03/new-layout-for-damien-learns-perl.html</feedburner:origLink></entry></feed>
