<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dcterms="http://purl.org/rss/1.0/modules/dcterms/" xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
  <channel>
    <generator>Plagger/0.7.17</generator>
    <link>http://desert-island.me.uk:8888/~castaway/perl-noise/</link>
    <description>Everything Perl from the Web</description>
    <title>Perl Noise Aggregator</title>
    <pubDate>Mon, 01 Aug 2011 14:00:37 +0100</pubDate>
    <item>
      <author>nobody@example.com (Andy Lester)</author>
      <dc:creator>nobody@example.com (Andy Lester)</dc:creator>
      <category>Conferences Community CPAN Perl 5 Perl 6 Perl Foundation</category>
      <link>http://feedproxy.google.com/~r/PerlBuzz/~3/ScJCxC2zx1A/perlbuzz-news-roundup-for-2011-07-31.html</link>
      <description>These links are collected from the Perlbuzz Twitter feed. If you have
suggestions for news bits, please mail me at andy@perlbuzz.com.

  * Hello, World in Place 2: InteractiveDebugger (blogs.perl.org)

  * Giving ack a little bit extra do-what-I-mean (shuttlethread.com)

  * Reducing documentation's technical debt (blogs.perl.org)

  * YAPC::NA attendees, please respond to survey (blogs.perl.org)

  * File::UStore, a UUID-based file storage abstractor (blogs.perl.org)

  * Protecting against cross-site scripting attacks with
    Template::AutoFilter (blogs.perl.org)

  * Screencast: How to contribute to a Perl module using vim and Github (szabgab.com)

  * Avoid unwanted bitwise operators with Perl::Critic (szabgab.com)

  * Just discovered rjray's Perl Module Monday feature: (dereferenced.com)

  * Booking.com donates $10K to support Perl 5 maintenance (news.perlfoundation.org)

  * Expect a flurry of Rakudo releases soon (rakudo.org)

  * cPanel is also sponsoring Perl 5 Maintenance Fund (news.perlfoundation.org)

  * YAPC::NA 2012 gets away from RTFM marketing (perlbuzz.com)

  * About the Perl 5 Core Maintenance Fund (perlfoundation.org)

  * Upgrading from Perl 5.8 to a less-than-newest version (blog.timbunce.org)

  * Using Acme::CPANAuthors::India to link with other authors (blogs.perl.org)

  * YAPC::Asia 2011 call for papers now open (yapcasia.org)

  * YAPC::Asia 2011 and the webapps behind it (blogs.perl.org)

  * Going to OSCON next week? Here are six tips for making the most of it
    with the least amount of hassle (petdance.com)

  * Portuguese Perl Workshop is Sep 22-23, 2011 (workshop.perl.pt)

  * Tool to move tickets from RT to Github (pythian.com)

  * Now you need LWP::Protocol::https (blogs.perl.org)

  * Perl program to back up Google contacts/calendar (preshweb.co.uk)

  * "What is MetaCPAN" screencast http://youtu.be/7N1lZY5E5gg (now with
    English subtitles)

  * Can't let #oscon pass without getting the scoop on cpangloss.com from
    (

  * "Perl 6 is solid enough now. Start thinking about porting modules.
    Start thinking about reinventing modules." -- Damian at #oscon

  * RT @pghphw @mjdominus will be teaching a course and giving a talk at
    PPW 2011. Watch for details.

  * Notes on Morphing Graph::Easy into Graph::Easy::Marpa (savage.net.au)

  * A new vim plugin to work with ack and iTerm: (vim.org)

  * Holy cow does a lot get done on MetaCPAN in a week (blogs.perl.org)

  * MetaCPAN::API gets updated (blogs.perl.org)

  * Rakudo Star 2011.07 released (rakudo.org)

  * Would you bring your kids to YAPC? (blog.yapcna.org)

  * Recollections of YAPC::NA 2011 (activestate.com)

  * Understanding autovivification (effectiveperlprogramming.com)

[IMAGE] [IMAGE] [IMAGE] [IMAGE][IMAGE]</description>
      <dc:date>2011-08-01T02:47:19Z</dc:date>
      <dc:subject>Conferences Community CPAN Perl 5 Perl 6 Perl Foundation</dc:subject>
      <title>Perlbuzz news roundup for 2011-07-31</title>
      <pubDate>Mon, 01 Aug 2011 02:47:19 -0000</pubDate>
      <content:encoded>
        &lt;p&gt;
These links are collected from the
&lt;a href="http://twitter.com/perlbuzz"&gt;Perlbuzz Twitter feed&lt;/a&gt;.
If you have suggestions for news bits, please mail me at
&lt;a href="mailto:andy@perlbuzz.com"&gt;andy@perlbuzz.com&lt;/a&gt;.
&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;Hello, World in Place 2: InteractiveDebugger (&lt;a href="http://blogs.perl.org/users/yko/2011/07/hello-world-in-plack-2-interactive-debugger.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Giving ack a little bit extra do-what-I-mean (&lt;a href="http://shuttlethread.com/blog/useful-ack-defaults"&gt;shuttlethread.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Reducing documentation's technical debt (&lt;a href="http://blogs.perl.org/users/rocco_caputo/2011/07/reducing-documentations-technical-debt.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;YAPC::NA attendees, please respond to survey (&lt;a href="http://blogs.perl.org/users/barbie/2011/07/yapcna-surveys---please-submit-your-responses.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;File::UStore, a UUID-based file storage abstractor (&lt;a href="http://blogs.perl.org/users/shantanu_bhadoria/2011/07/fileustore-a-uuid-based-file-storage-abstractor-why-would-a-temp-folder-not-be-writable.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Protecting against cross-site scripting attacks with Template::AutoFilter (&lt;a href="http://blogs.perl.org/users/mithaldu/2011/07/fixing-xss-in-catalyst-with-a-really-big-hammer.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Screencast: How to contribute to a Perl module using vim and Github (&lt;a href="http://szabgab.com/blog/2011/07/contributing-to-a-perl-module-on-cpan-using-vim-and-github.html"&gt;szabgab.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Avoid unwanted bitwise operators with Perl::Critic (&lt;a href="http://szabgab.com/blog/2011/07/avoid-unwanted-bitwise-operators.html"&gt;szabgab.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Just discovered rjray's Perl Module Monday feature: (&lt;a href="http://www.dereferenced.com/tags/module-monday/"&gt;dereferenced.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Booking.com donates $10K to support Perl 5 maintenance (&lt;a href="http://news.perlfoundation.org/2011/07/bookingcom-sponsor-p5cmf.html"&gt;news.perlfoundation.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Expect a flurry of Rakudo releases soon (&lt;a href="http://rakudo.org/2011/07/19/upcoming-rakudo-releases/"&gt;rakudo.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;cPanel is also sponsoring Perl 5 Maintenance Fund (&lt;a href="http://news.perlfoundation.org/2011/07/cpanel-sponsor-p5cmf.html"&gt;news.perlfoundation.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;YAPC::NA 2012 gets away from RTFM marketing (&lt;a href="http://perlbuzz.com/2011/07/yapcna-2012-gets-away-from-rtfm-marketing.html"&gt;perlbuzz.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;About the Perl 5 Core Maintenance Fund (&lt;a href="http://www.perlfoundation.org/perl_5_core_maintenance_fund"&gt;perlfoundation.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrading from Perl 5.8 to a less-than-newest version (&lt;a href="http://blog.timbunce.org/2011/07/21/upgrading-from-perl-5-8/"&gt;blog.timbunce.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Using Acme::CPANAuthors::India to link with other authors (&lt;a href="http://blogs.perl.org/users/shantanu_bhadoria/2011/07/acmecpanauthorsindia.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;YAPC::Asia 2011 call for papers now open (&lt;a href="http://yapcasia.org/2011/news/yapcasia-2011-call-for-papers.html"&gt;yapcasia.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;YAPC::Asia 2011 and the webapps behind it (&lt;a href="http://blogs.perl.org/users/lestrrat/2011/07/re-yapcasia-2011-and-the-web-apps-behind-it.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Going to OSCON next week? Here are six tips for making the most of it with the least amount of hassle (&lt;a href="http://petdance.com/2011/07/tips-for-preparing-for-technical-conferences/"&gt;petdance.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Portuguese Perl Workshop is Sep 22-23, 2011 (&lt;a href="http://workshop.perl.pt/ptpw2011/"&gt;workshop.perl.pt&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tool to move tickets from RT to Github (&lt;a href="http://www.pythian.com/news/24659/bandying-tickets-from-rt-to-github-issues/"&gt;pythian.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Now you need LWP::Protocol::https (&lt;a href="http://blogs.perl.org/users/brian_d_foy/2011/07/now-you-need-lwpprotocolhttps.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Perl program to back up Google contacts/calendar (&lt;a href="http://www.preshweb.co.uk/2011/07/backing-up-google-contactscalendar-etc/"&gt;preshweb.co.uk&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"What is MetaCPAN" screencast http://youtu.be/7N1lZY5E5gg (now with English subtitles)&lt;/li&gt;
&lt;li&gt;Can't let #oscon pass without getting the scoop on cpangloss.com from (&lt;a href="&amp;lt;a href=&amp;quot;http://twitter.com/schwern&amp;quot;&amp;gt;@schwern&amp;lt;/a&amp;gt;."&gt;&lt;a href="twitter.com&amp;lt;/a&amp;gt;)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;" perl isn't a programming language. it's life-support system for cpan." damian at #oscon&lt;/li&gt;
&lt;li&gt;"Perl 6 is solid enough now. Start thinking about porting modules. Start thinking about reinventing modules." -- Damian at #oscon&lt;/li&gt;
&lt;li&gt;RT &lt;a href="http://twitter.com/pghphw"&gt;@pghphw&lt;/a&gt; &lt;a href="http://twitter.com/mjdominus"&gt;@mjdominus&lt;/a&gt; will be teaching a course and giving a talk at PPW 2011. Watch for details.&lt;/li&gt;
&lt;li&gt;Notes on Morphing Graph::Easy into Graph::Easy::Marpa (&lt;a href="http://savage.net.au/Perl-modules/html/graph.easy.marpa/writing.graph.easy.marpa.html"&gt;savage.net.au&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new vim plugin to work with ack and iTerm: (&lt;a href="http://www.vim.org/scripts/script.php?script_id=3675"&gt;vim.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Holy cow does a lot get done on MetaCPAN in a week (&lt;a href="http://blogs.perl.org/users/olaf_alders/2011/07/this-week-in-metacpan.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MetaCPAN::API gets updated (&lt;a href="http://blogs.perl.org/users/sawyer_x/2011/07/metacpanapi-gets-updated.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Rakudo Star 2011.07 released (&lt;a href="http://rakudo.org/2011/07/29/rakudo-star-2011-07-released/"&gt;rakudo.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Would you bring your kids to YAPC? (&lt;a href="http://blog.yapcna.org/post/8246728076/would-you-bring-your-kids-to-yapc"&gt;blog.yapcna.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Recollections of YAPC::NA 2011 (&lt;a href="http://www.activestate.com/blog/2011/07/recollections-yapcna-2011"&gt;activestate.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Understanding autovivification (&lt;a href="http://www.effectiveperlprogramming.com/blog/1247"&gt;effectiveperlprogramming.com&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

        
    &lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=ScJCxC2zx1A:f6v6QFa2hDE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=yIl2AUoC8zA"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=ScJCxC2zx1A:f6v6QFa2hDE:F7zBnMyn0Lo"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=ScJCxC2zx1A:f6v6QFa2hDE:F7zBnMyn0Lo"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=ScJCxC2zx1A:f6v6QFa2hDE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?i=ScJCxC2zx1A:f6v6QFa2hDE:V_sGLiPBpWU"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/PerlBuzz?a=ScJCxC2zx1A:f6v6QFa2hDE:qj6IDK7rITs"&gt;&lt;img src="http://feeds.feedburner.com/~ff/PerlBuzz?d=qj6IDK7rITs"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/PerlBuzz/~4/ScJCxC2zx1A"&gt;</content:encoded>
      <dcterms:modified>2011-08-01T02:47:19Z</dcterms:modified>
      <guid isPermaLink="false">tag:insel,2006:tag:perlbuzz.com,2011://1.828</guid>
    </item>
    <item>
      <author>nobody@example.com (Andy Lester)</author>
      <dc:creator>nobody@example.com (Andy Lester)</dc:creator>
      <category>Conferences Community CPAN Perl 5 Perl 6 Perl Foundation</category>
      <link>http://perlbuzz.com/2011/07/perlbuzz-news-roundup-for-2011-07-31.html</link>
      <description>These links are collected from the Perlbuzz Twitter feed. If you have
suggestions for news bits, please mail me at andy@perlbuzz.com.

  * Hello, World in Place 2: InteractiveDebugger (blogs.perl.org)

  * Giving ack a little bit extra do-what-I-mean (shuttlethread.com)

  * Reducing documentation's technical debt (blogs.perl.org)

  * YAPC::NA attendees, please respond to survey (blogs.perl.org)

  * File::UStore, a UUID-based file storage abstractor (blogs.perl.org)

  * Protecting against cross-site scripting attacks with
    Template::AutoFilter (blogs.perl.org)

  * Screencast: How to contribute to a Perl module using vim and Github (szabgab.com)

  * Avoid unwanted bitwise operators with Perl::Critic (szabgab.com)

  * Just discovered rjray's Perl Module Monday feature: (dereferenced.com)

  * Booking.com donates $10K to support Perl 5 maintenance (news.perlfoundation.org)

  * Expect a flurry of Rakudo releases soon (rakudo.org)

  * cPanel is also sponsoring Perl 5 Maintenance Fund (news.perlfoundation.org)

  * YAPC::NA 2012 gets away from RTFM marketing (perlbuzz.com)

  * About the Perl 5 Core Maintenance Fund (perlfoundation.org)

  * Upgrading from Perl 5.8 to a less-than-newest version (blog.timbunce.org)

  * Using Acme::CPANAuthors::India to link with other authors (blogs.perl.org)

  * YAPC::Asia 2011 call for papers now open (yapcasia.org)

  * YAPC::Asia 2011 and the webapps behind it (blogs.perl.org)

  * Going to OSCON next week? Here are six tips for making the most of it
    with the least amount of hassle (petdance.com)

  * Portuguese Perl Workshop is Sep 22-23, 2011 (workshop.perl.pt)

  * Tool to move tickets from RT to Github (pythian.com)

  * Now you need LWP::Protocol::https (blogs.perl.org)

  * Perl program to back up Google contacts/calendar (preshweb.co.uk)

  * "What is MetaCPAN" screencast http://youtu.be/7N1lZY5E5gg (now with
    English subtitles)

  * Can't let #oscon pass without getting the scoop on cpangloss.com from
    (

  * "Perl 6 is solid enough now. Start thinking about porting modules.
    Start thinking about reinventing modules." -- Damian at #oscon

  * RT @pghphw @mjdominus will be teaching a course and giving a talk at
    PPW 2011. Watch for details.

  * Notes on Morphing Graph::Easy into Graph::Easy::Marpa (savage.net.au)

  * A new vim plugin to work with ack and iTerm: (vim.org)

  * Holy cow does a lot get done on MetaCPAN in a week (blogs.perl.org)

  * MetaCPAN::API gets updated (blogs.perl.org)

  * Rakudo Star 2011.07 released (rakudo.org)

  * Would you bring your kids to YAPC? (blog.yapcna.org)

  * Recollections of YAPC::NA 2011 (activestate.com)

  * Understanding autovivification (effectiveperlprogramming.com)</description>
      <dc:date>2011-08-01T02:47:19Z</dc:date>
      <dc:subject>Conferences Community CPAN Perl 5 Perl 6 Perl Foundation</dc:subject>
      <title>Perlbuzz news roundup for 2011-07-31</title>
      <pubDate>Mon, 01 Aug 2011 02:47:19 -0000</pubDate>
      <content:encoded>
        &lt;p&gt;
These links are collected from the
&lt;a href="http://twitter.com/perlbuzz"&gt;Perlbuzz Twitter feed&lt;/a&gt;.
If you have suggestions for news bits, please mail me at
&lt;a href="mailto:andy@perlbuzz.com"&gt;andy@perlbuzz.com&lt;/a&gt;.
&lt;/p&gt;

&lt;ul&gt;

&lt;li&gt;Hello, World in Place 2: InteractiveDebugger (&lt;a href="http://blogs.perl.org/users/yko/2011/07/hello-world-in-plack-2-interactive-debugger.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Giving ack a little bit extra do-what-I-mean (&lt;a href="http://shuttlethread.com/blog/useful-ack-defaults"&gt;shuttlethread.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Reducing documentation's technical debt (&lt;a href="http://blogs.perl.org/users/rocco_caputo/2011/07/reducing-documentations-technical-debt.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;YAPC::NA attendees, please respond to survey (&lt;a href="http://blogs.perl.org/users/barbie/2011/07/yapcna-surveys---please-submit-your-responses.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;File::UStore, a UUID-based file storage abstractor (&lt;a href="http://blogs.perl.org/users/shantanu_bhadoria/2011/07/fileustore-a-uuid-based-file-storage-abstractor-why-would-a-temp-folder-not-be-writable.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Protecting against cross-site scripting attacks with Template::AutoFilter (&lt;a href="http://blogs.perl.org/users/mithaldu/2011/07/fixing-xss-in-catalyst-with-a-really-big-hammer.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Screencast: How to contribute to a Perl module using vim and Github (&lt;a href="http://szabgab.com/blog/2011/07/contributing-to-a-perl-module-on-cpan-using-vim-and-github.html"&gt;szabgab.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Avoid unwanted bitwise operators with Perl::Critic (&lt;a href="http://szabgab.com/blog/2011/07/avoid-unwanted-bitwise-operators.html"&gt;szabgab.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Just discovered rjray's Perl Module Monday feature: (&lt;a href="http://www.dereferenced.com/tags/module-monday/"&gt;dereferenced.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Booking.com donates $10K to support Perl 5 maintenance (&lt;a href="http://news.perlfoundation.org/2011/07/bookingcom-sponsor-p5cmf.html"&gt;news.perlfoundation.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Expect a flurry of Rakudo releases soon (&lt;a href="http://rakudo.org/2011/07/19/upcoming-rakudo-releases/"&gt;rakudo.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;cPanel is also sponsoring Perl 5 Maintenance Fund (&lt;a href="http://news.perlfoundation.org/2011/07/cpanel-sponsor-p5cmf.html"&gt;news.perlfoundation.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;YAPC::NA 2012 gets away from RTFM marketing (&lt;a href="http://perlbuzz.com/2011/07/yapcna-2012-gets-away-from-rtfm-marketing.html"&gt;perlbuzz.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;About the Perl 5 Core Maintenance Fund (&lt;a href="http://www.perlfoundation.org/perl_5_core_maintenance_fund"&gt;perlfoundation.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Upgrading from Perl 5.8 to a less-than-newest version (&lt;a href="http://blog.timbunce.org/2011/07/21/upgrading-from-perl-5-8/"&gt;blog.timbunce.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Using Acme::CPANAuthors::India to link with other authors (&lt;a href="http://blogs.perl.org/users/shantanu_bhadoria/2011/07/acmecpanauthorsindia.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;YAPC::Asia 2011 call for papers now open (&lt;a href="http://yapcasia.org/2011/news/yapcasia-2011-call-for-papers.html"&gt;yapcasia.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;YAPC::Asia 2011 and the webapps behind it (&lt;a href="http://blogs.perl.org/users/lestrrat/2011/07/re-yapcasia-2011-and-the-web-apps-behind-it.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Going to OSCON next week? Here are six tips for making the most of it with the least amount of hassle (&lt;a href="http://petdance.com/2011/07/tips-for-preparing-for-technical-conferences/"&gt;petdance.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Portuguese Perl Workshop is Sep 22-23, 2011 (&lt;a href="http://workshop.perl.pt/ptpw2011/"&gt;workshop.perl.pt&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Tool to move tickets from RT to Github (&lt;a href="http://www.pythian.com/news/24659/bandying-tickets-from-rt-to-github-issues/"&gt;pythian.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Now you need LWP::Protocol::https (&lt;a href="http://blogs.perl.org/users/brian_d_foy/2011/07/now-you-need-lwpprotocolhttps.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Perl program to back up Google contacts/calendar (&lt;a href="http://www.preshweb.co.uk/2011/07/backing-up-google-contactscalendar-etc/"&gt;preshweb.co.uk&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;"What is MetaCPAN" screencast http://youtu.be/7N1lZY5E5gg (now with English subtitles)&lt;/li&gt;
&lt;li&gt;Can't let #oscon pass without getting the scoop on cpangloss.com from (&lt;a href="&amp;lt;a href=&amp;quot;http://twitter.com/schwern&amp;quot;&amp;gt;@schwern&amp;lt;/a&amp;gt;."&gt;&lt;a href="twitter.com&amp;lt;/a&amp;gt;)&amp;lt;/li&amp;gt;
&amp;lt;li&amp;gt;" perl isn't a programming language. it's life-support system for cpan." damian at #oscon&lt;/li&gt;
&lt;li&gt;"Perl 6 is solid enough now. Start thinking about porting modules. Start thinking about reinventing modules." -- Damian at #oscon&lt;/li&gt;
&lt;li&gt;RT &lt;a href="http://twitter.com/pghphw"&gt;@pghphw&lt;/a&gt; &lt;a href="http://twitter.com/mjdominus"&gt;@mjdominus&lt;/a&gt; will be teaching a course and giving a talk at PPW 2011. Watch for details.&lt;/li&gt;
&lt;li&gt;Notes on Morphing Graph::Easy into Graph::Easy::Marpa (&lt;a href="http://savage.net.au/Perl-modules/html/graph.easy.marpa/writing.graph.easy.marpa.html"&gt;savage.net.au&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;A new vim plugin to work with ack and iTerm: (&lt;a href="http://www.vim.org/scripts/script.php?script_id=3675"&gt;vim.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Holy cow does a lot get done on MetaCPAN in a week (&lt;a href="http://blogs.perl.org/users/olaf_alders/2011/07/this-week-in-metacpan.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;MetaCPAN::API gets updated (&lt;a href="http://blogs.perl.org/users/sawyer_x/2011/07/metacpanapi-gets-updated.html"&gt;blogs.perl.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Rakudo Star 2011.07 released (&lt;a href="http://rakudo.org/2011/07/29/rakudo-star-2011-07-released/"&gt;rakudo.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Would you bring your kids to YAPC? (&lt;a href="http://blog.yapcna.org/post/8246728076/would-you-bring-your-kids-to-yapc"&gt;blog.yapcna.org&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Recollections of YAPC::NA 2011 (&lt;a href="http://www.activestate.com/blog/2011/07/recollections-yapcna-2011"&gt;activestate.com&lt;/a&gt;)&lt;/li&gt;
&lt;li&gt;Understanding autovivification (&lt;a href="http://www.effectiveperlprogramming.com/blog/1247"&gt;effectiveperlprogramming.com&lt;/a&gt;)&lt;/li&gt;
&lt;/ul&gt;

        
    </content:encoded>
      <dcterms:modified>2011-08-01T02:47:19Z</dcterms:modified>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:tag:perlbuzz.com,2011://1.828</guid>
    </item>
    <item>
      <author>nobody@example.com (Gabor Szabo)</author>
      <dc:creator>nobody@example.com (Gabor Szabo)</dc:creator>
      <category>Perl, news, newsletter</category>
      <link>http://szabgab.com/blog/2011/08/weekly-perl-news-first-issue-sent-out.html</link>
      <description>You are busy churning out code or managing the developers. You care about
Perl but don't have time to go through tens and hundreds of articles and
blog posts every day. You want to keep an eye on the development of Perl
without drowning in a sea of blog posts. You need someone to point out
the most important news and articles in the Perl World.

That's how I opened the first issue.[1]

With this newsletter I'll try to be your guide.

The newsletter won't provide original content. I am just going to send
out links with a few words of comment to the items that I found most
important.

If you are a Perl junkie like me, reading all the posts the Perl
community and ecosystem produces, then this newsletter will just anger
you. Why did I include X and not Y? You are welcome to let me know your
opinion.

If you are like the silent majority, having little time but still wanting
to be up to date then, I hope, you will find this newsletter useful.

My hope is that this newsletter will serve both "simple users" of Perl
and managers who run teams of Perl developer.

Here you can see the first issue and you can sign up to the free Perl
Weekly.

Enjoy!

[1] Well, except a typo that was quickly caught and reported by MDK,
thanks!</description>
      <dc:date>2011-08-01T02:02:08Z</dc:date>
      <dc:subject>Perl, news, newsletter</dc:subject>
      <title>Weekly Perl News - first issue sent out</title>
      <pubDate>Mon, 01 Aug 2011 02:02:08 -0000</pubDate>
      <content:encoded>&lt;p&gt;
You are busy churning out code or managing the developers. 
You care about Perl but don't have time to go through tens and hundreds of articles 
and blog posts every day. You want to keep an eye on the development of Perl without 
drowning in a sea of blog posts. You need someone to point out the most important 
news and articles in the Perl World.
&lt;/p&gt;
&lt;p&gt;
That's how I opened the first issue.[1]
&lt;/p&gt;
&lt;p&gt;
With this newsletter I'll try to be &lt;b&gt;your guide&lt;/b&gt;. 
&lt;/p&gt;
&lt;p&gt;
The newsletter won't provide original content. I am just 
going to send out links with a few words of comment 
to the items that I found most important.
&lt;/p&gt;
&lt;p&gt;
If you are a &lt;b&gt;Perl junkie like me&lt;/b&gt;, reading all the posts 
the Perl community and ecosystem produces, then this 
newsletter will just anger you. Why did I include X and not Y?
You are welcome to let me know your opinion.
&lt;/p&gt;
&lt;p&gt;
If you are like the &lt;b&gt;silent majority&lt;/b&gt;, having little time
but still wanting to be up to date then, I hope, you will find 
this newsletter useful.
&lt;/p&gt;
&lt;p&gt;
My hope is that this newsletter will serve both &lt;b&gt;"simple users"&lt;/b&gt;
of Perl and &lt;b&gt;managers&lt;/b&gt; who run teams of Perl developer.
&lt;/p&gt;
&lt;p&gt;
&lt;a href="http://perlweekly.com/"&gt;Here&lt;/a&gt; you can see the first issue and you can sign up to the free 
&lt;a href="http://perlweekly.com/"&gt;Perl Weekly&lt;/a&gt;.
&lt;/p&gt;
&lt;p&gt;
Enjoy!
&lt;/p&gt;
&lt;p&gt;
[1] Well, except a typo that was quickly caught and 
reported by &lt;a href="http://mdk.per.ly/"&gt;MDK&lt;/a&gt;, thanks!
&lt;/p&gt;
</content:encoded>
      <dcterms:modified>2011-08-01T02:02:08Z</dcterms:modified>
      <guid isPermaLink="false">tag:insel,2006:http://szabgab.com/blog/2011/08/weekly-perl-news-first-issue-sent-out.html</guid>
    </item>
    <item>
      <author>nobody@example.com (brian d foy)</author>
      <dc:creator>nobody@example.com (brian d foy)</dc:creator>
      <category>Uncategorized</category>
      <link>http://www.effectiveperlprogramming.com/blog/1256</link>
      <description>Autovivification, although a great feature, might bite you when you don’t
expect it. I explained this feature in Understand autovivification, but I
didn’t tell you that there’s a way to control it and even turn it off
completely.

The autovivification pragma, which you can get from CPAN, lets you decide
how autovivification works, or doesn’t work. As you saw in Understand
autovivification, there are several ways that autovivification comes into
play, specifically when you dereference an undefined value to:

  * fetch a value

  * store a value

  * test an undefined value with exists

  * delete an element

The pragma lets you control each of these independently.

The simplest use is simply unimport the module with no. This gets a bit
tricky because this pragma is more interesting for what you disallow
rather than enable:

no autovivification;

With no arguments, this turns off autovivification for fetching a value,
or using delete or exists. This does not turn off autovivification for
storing a value. You’re more likely to make mistakes with those first
three, and most likely to get what you want with the last one.

None of these work, in that they don’t create any more of the data
structure:

no autovivification;

my $cats;
delete $cats{'Buster'};
my $foo = $cats{'Buster'}; 

if( exists $cats{'Buster'} ) { 1 }

use Data::Dumper;
print Dumper( $cats );

You don’t get an error or a warning, but nothing happens to $cats, which
is still undefined at the end. The pragma just leaves the undefined value
as it is and your program continues. In those cases, you still get the
answers that expect. When the element isn’t there, you still get undef
when you try to access it. It stills returns false when you try exists
and the element isn’t there after a exists. Your program continues
without a warning.

If you want to know when you’ve skipped at possible autovivification, you
can also tell autovivification to warn you, or if you’re really paranoid,
kill your program.

Including the warn option gives you warnings. As with any import list,
when you specify something you override all defaults. If you still want
those defaults, you have to list them explicitly:

no autovivification qw(fetch delete exists warn);

use Data::Dumper;

my $cats;

delete $cats-&gt;{Buster};

print Dumper( $cats );

Now you get a warning:

Reference was vivified at auto.pl line 7.
$VAR1 = undef;

If you want to stop the program, you use strict instead of warn:

no autovivification qw(fetch delete exists strict);

use Data::Dumper;

my $cats;

delete $cats-&gt;{Buster};

print Dumper( $cats );

Your program stops at the point that Perl tries to autovivify something
and gives you an file and line where autovivification stopped your
program:

Reference vivification forbidden at auto.pl line 7.

When you store a value, however, autovivification doesn’t get in your
way, even if you create a deep one:

no autovivification;

use Data::Dumper;

my $cats;

$cats-&gt;{Buster}{count} = 9;

print Dumper( $cats );

You still autovivified the structure:

$VAR1 = {
          'Buster' =&gt; {
                        'count' =&gt; 9
                      }
        };

If you want to turn off autovification for storing a variable, you have
to explicitly disallow it. As before, you have to provide the other
default options that you’d like to keep:

no autovivification qw(fetch delete exists store strict);

use Data::Dumper;

my $cats;

$cats-&gt;{Buster}++;

print Dumper( $cats );

Now, when you try to autovivify a hash reference to store a value in the
Buster key, your program stops (because you are also using strict:

Reference vivification forbidden at auto.pl line 7.


Lexical scope
-------------

You can limit the effect of autovivification pragma to part of your
program by using it in only in the scope where you need it. There are two
ways that you can do this, depending on what you need.

First, you can turn off all autovivification for the entire file (which
is itself a scope, see Know what creates a scope), but re-enable it for
the bits where you need it:

no autovivification qw(fetch delete exists store strict);

# can't do it in here

{
use autovivification qw(store);

...; # allow some of it in here
}

# can't do it in here, either

Second, you can leave Perl’s normal autovivification features in place
for the entire file, but turn it off in the sensitive parts of the
program, just as in Item 100. Use lexical warnings to selectively turn on
or off complaints (but in this case, engaging safety features):

...; # program with possible autovivification

{
# can't do it in here
no autovivification qw(fetch delete exists store strict);

}

...; # program with possible autovivification


Things to remember
------------------

  * The autovivification pragma lets you disable Perl’s automatic data
    structure creation

  * The defaults do not prevent you from assigning to an autovivified
    reference

  * You can enable warnings or errors to catch autovivification events

Post to Twitter Post to Delicious Post to Digg Post to Facebook
Post to Reddit</description>
      <dc:date>2011-07-31T22:01:20Z</dc:date>
      <dc:subject>Uncategorized</dc:subject>
      <title>Turn off autovivification when you don’t want it</title>
      <pubDate>Sun, 31 Jul 2011 22:01:20 -0000</pubDate>
      <content:encoded>&lt;p&gt;Autovivification, although a great feature, might bite you when you don&amp;#8217;t expect it. I explained this feature in &lt;a href="http://www.effectiveperlprogramming.com/blog/1247"&gt;Understand autovivification&lt;/a&gt;, but I didn&amp;#8217;t tell you that there&amp;#8217;s a way to control it and even turn it off completely.&lt;/p&gt;
&lt;p&gt;The &lt;a href="http://search.cpan.org/dist/autovivification"&gt;autovivification&lt;/a&gt; pragma, which you can get from CPAN, lets you decide how autovivification works, or doesn&amp;#8217;t work. As you saw in &lt;a href="http://www.effectiveperlprogramming.com/blog/1247"&gt;Understand autovivification&lt;/a&gt;, there are several ways that autovivification comes into play, specifically when you dereference an undefined value to:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;fetch a value
&lt;li&gt;store a value
&lt;li&gt;test an undefined value with &lt;code&gt;exists&lt;/code&gt;
&lt;li&gt;&lt;code&gt;delete&lt;/code&gt; an element
&lt;/ul&gt;
&lt;p&gt;The pragma lets you control each of these independently.&lt;/p&gt;
&lt;p&gt;The simplest use is simply &lt;i&gt;unimport&lt;/i&gt; the module with &lt;code&gt;no&lt;/code&gt;. This gets a bit tricky because this pragma is more interesting for what you disallow rather than enable:&lt;/p&gt;
&lt;pre class="brush:perl"&gt;
no autovivification;
&lt;/pre&gt;
&lt;p&gt;With no arguments, this turns off autovivification for fetching a value, or using &lt;code&gt;delete&lt;/code&gt; or &lt;code&gt;exists&lt;/code&gt;. This &lt;i&gt;does not&lt;/i&gt; turn off autovivification for storing a value. You&amp;#8217;re more likely to make mistakes with those first three, and most likely to get what you want with the last one.&lt;/p&gt;
&lt;p&gt;None of these work, in that they don&amp;#8217;t create any more of the data structure:&lt;/p&gt;
&lt;pre class="brush:perl"&gt;
no autovivification;

my $cats;
delete $cats{'Buster'};
my $foo = $cats{'Buster'}; 

if( exists $cats{'Buster'} ) { 1 }

use Data::Dumper;
print Dumper( $cats );
&lt;/pre&gt;
&lt;p&gt;You don&amp;#8217;t get an error or a warning, but nothing happens to &lt;code&gt;$cats&lt;/code&gt;, which is still undefined at the end. The pragma just leaves the undefined value as it is and your program continues. In those cases, you still get the answers that expect. When the element isn&amp;#8217;t there, you still get undef when you try to access it. It stills returns false when you try &lt;code&gt;exists&lt;/code&gt; and the element isn&amp;#8217;t there after a &lt;code&gt;exists&lt;/code&gt;. Your program continues without a warning.&lt;/p&gt;
&lt;p&gt;If you want to know when you&amp;#8217;ve skipped at possible autovivification, you can also tell &lt;a href="http://search.cpan.org/dist/autovivification"&gt;autovivification&lt;/a&gt; to warn you, or if you&amp;#8217;re really paranoid, kill your program.&lt;/p&gt;
&lt;p&gt;Including the &lt;code&gt;warn&lt;/code&gt; option gives you warnings. As with any import list, when you specify something you override all defaults. If you still want those defaults, you have to list them explicitly:&lt;/p&gt;
&lt;pre class="brush:perl"&gt;
no autovivification qw(fetch delete exists warn);

use Data::Dumper;

my $cats;

delete $cats-&amp;gt;{Buster};

print Dumper( $cats );
&lt;/pre&gt;
&lt;p&gt;Now you get a warning:&lt;/p&gt;
&lt;pre class="brush:plain"&gt;
Reference was vivified at auto.pl line 7.
$VAR1 = undef;
&lt;/pre&gt;
&lt;p&gt;If you want to stop the program, you use &lt;code&gt;strict&lt;/code&gt; instead of &lt;code&gt;warn&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="brush:perl"&gt;
no autovivification qw(fetch delete exists strict);

use Data::Dumper;

my $cats;

delete $cats-&amp;gt;{Buster};

print Dumper( $cats );
&lt;/pre&gt;
&lt;p&gt;Your program stops at the point that Perl tries to autovivify something and gives you an file and line where &lt;a href="http://search.cpan.org/dist/autovivification"&gt;autovivification&lt;/a&gt; stopped your program:&lt;/p&gt;
&lt;pre class="brush:plain"&gt;
Reference vivification forbidden at auto.pl line 7.
&lt;/pre&gt;
&lt;p&gt;When you store a value, however, &lt;a href="http://search.cpan.org/dist/autovivification"&gt;autovivification&lt;/a&gt; doesn&amp;#8217;t get in your way, even if you create a deep one:&lt;/p&gt;
&lt;pre class="brush:perl"&gt;
no autovivification;

use Data::Dumper;

my $cats;

$cats-&amp;gt;{Buster}{count} = 9;

print Dumper( $cats );
&lt;/pre&gt;
&lt;p&gt;You still autovivified the structure:&lt;/p&gt;
&lt;pre class="brush:plain"&gt;
$VAR1 = {
          'Buster' =&amp;gt; {
                        'count' =&amp;gt; 9
                      }
        };
&lt;/pre&gt;
&lt;p&gt;If you want to turn off autovification for storing a variable, you have to explicitly disallow it. As before, you have to provide the other default options that you&amp;#8217;d like to keep:&lt;/p&gt;
&lt;pre class="brush:perl"&gt;
no autovivification qw(fetch delete exists store strict);

use Data::Dumper;

my $cats;

$cats-&amp;gt;{Buster}++;

print Dumper( $cats );
&lt;/pre&gt;
&lt;p&gt;Now, when you try to autovivify a hash reference to store a value in the &lt;code&gt;Buster&lt;/code&gt; key, your program stops (because you are also using &lt;code&gt;strict&lt;/code&gt;:&lt;/p&gt;
&lt;pre class="brush:plain"&gt;
Reference vivification forbidden at auto.pl line 7.
&lt;/pre&gt;
&lt;h2&gt;Lexical scope&lt;/h2&gt;
&lt;p&gt;You can limit the effect of &lt;a href="http://search.cpan.org/dist/autovivification"&gt;autovivification&lt;/a&gt; pragma to part of your program by using it in only in the scope where you need it. There are two ways that you can do this, depending on what you need.&lt;/p&gt;
&lt;p&gt;First, you can turn off all autovivification for the entire file (which is itself a scope, see &lt;a href="http://www.effectiveperlprogramming.com/blog/48"&gt;Know what creates a scope&lt;/a&gt;), but re-enable it for the bits where you need it:&lt;/p&gt;
&lt;pre class="brush:perl"&gt;
no autovivification qw(fetch delete exists store strict);

# can't do it in here

{
use autovivification qw(store);

...; # allow some of it in here
}

# can't do it in here, either
&lt;/pre&gt;
&lt;p&gt;Second, you can leave Perl&amp;#8217;s normal autovivification features in place for the entire file, but turn it off in the sensitive parts of the program, just as in &lt;span class="item"&gt;Item 100. Use lexical warnings to selectively turn on or off complaints&lt;/span&gt; (but in this case, engaging safety features):&lt;/p&gt;
&lt;pre class="brush:perl"&gt;
...; # program with possible autovivification

{
# can't do it in here
no autovivification qw(fetch delete exists store strict);

}

...; # program with possible autovivification
&lt;/pre&gt;
&lt;h2&gt;Things to remember&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;The &lt;a href="http://search.cpan.org/dist/autovivification"&gt;autovivification&lt;/a&gt; pragma lets you disable Perl&amp;#8217;s automatic data structure creation
&lt;li&gt;The defaults do not prevent you from assigning to an autovivified reference
&lt;li&gt;You can enable warnings or errors to catch autovivification events
&lt;/ul&gt;
&lt;p align="left"&gt;&lt;a class="tt" href="http://twitter.com/home/?status=Turn+off+autovivification+when+you+don%E2%80%99t+want+it+http://tinyurl.com/4ygnnoa" title="Post to Twitter"&gt;&lt;img src="http://www.effectiveperlprogramming.com/wp-content/plugins/tweet-this/icons/tt-twitter2.png" alt="Post to Twitter"&gt;&lt;/a&gt; &lt;a class="tt" href="http://twitter.com/home/?status=Turn+off+autovivification+when+you+don%E2%80%99t+want+it+http://tinyurl.com/4ygnnoa" title="Post to Twitter"&gt; &lt;/a&gt; &lt;a class="tt" href="http://delicious.com/post?url=http://www.effectiveperlprogramming.com/blog/1256&amp;amp;title=Turn+off+autovivification+when+you+don%E2%80%99t+want+it" title="Post to Delicious"&gt;&lt;img src="http://www.effectiveperlprogramming.com/wp-content/plugins/tweet-this/icons/tt-delicious.png" alt="Post to Delicious"&gt;&lt;/a&gt; &lt;a class="tt" href="http://delicious.com/post?url=http://www.effectiveperlprogramming.com/blog/1256&amp;amp;title=Turn+off+autovivification+when+you+don%E2%80%99t+want+it" title="Post to Delicious"&gt; &lt;/a&gt; &lt;a class="tt" href="http://digg.com/submit?url=http://www.effectiveperlprogramming.com/blog/1256&amp;amp;title=Turn+off+autovivification+when+you+don%E2%80%99t+want+it" title="Post to Digg"&gt;&lt;img src="http://www.effectiveperlprogramming.com/wp-content/plugins/tweet-this/icons/tt-digg.png" alt="Post to Digg"&gt;&lt;/a&gt; &lt;a class="tt" href="http://digg.com/submit?url=http://www.effectiveperlprogramming.com/blog/1256&amp;amp;title=Turn+off+autovivification+when+you+don%E2%80%99t+want+it" title="Post to Digg"&gt; &lt;/a&gt; &lt;a class="tt" href="http://www.facebook.com/share.php?u=http://www.effectiveperlprogramming.com/blog/1256&amp;amp;t=Turn+off+autovivification+when+you+don%E2%80%99t+want+it" title="Post to Facebook"&gt;&lt;img src="http://www.effectiveperlprogramming.com/wp-content/plugins/tweet-this/icons/tt-facebook.png" alt="Post to Facebook"&gt;&lt;/a&gt; &lt;a class="tt" href="http://www.facebook.com/share.php?u=http://www.effectiveperlprogramming.com/blog/1256&amp;amp;t=Turn+off+autovivification+when+you+don%E2%80%99t+want+it" title="Post to Facebook"&gt; &lt;/a&gt; &lt;a class="tt" href="http://reddit.com/submit?url=http://www.effectiveperlprogramming.com/blog/1256&amp;amp;title=Turn+off+autovivification+when+you+don%E2%80%99t+want+it" title="Post to Reddit"&gt;&lt;img src="http://www.effectiveperlprogramming.com/wp-content/plugins/tweet-this/icons/tt-reddit.png" alt="Post to Reddit"&gt;&lt;/a&gt; &lt;a class="tt" href="http://reddit.com/submit?url=http://www.effectiveperlprogramming.com/blog/1256&amp;amp;title=Turn+off+autovivification+when+you+don%E2%80%99t+want+it" title="Post to Reddit"&gt; &lt;/a&gt;&lt;/p&gt;</content:encoded>
      <dcterms:modified>2011-07-31T22:01:20Z</dcterms:modified>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://www.effectiveperlprogramming.com/?p=1256</guid>
    </item>
    <item>
      <author>nobody@example.com (ttjjss)</author>
      <dc:creator>nobody@example.com (ttjjss)</dc:creator>
      <category>gsoc Perl</category>
      <link>http://ttjjss.wordpress.com/2011/07/31/gsoc-%e2%80%93-the-podparser-branch-has-landed/</link>
      <description>Just a few minutes ago, with a total count of 28 files changed, 1627
insertions and 41 deletions, the podparser branch in which I’ve been
doing my GSoC work has been merged into nom, the current development
branch of Rakudo and the soon-to-be master. So, what do we get?

  * Pod is now parsed, not ignored. The whole parse tree is available in
    runtime in the $=POD variable

  * A basic support for documenting classes and subroutines with #=
    comments, and the .WHY method on each object returning the attached
    documentation

  * A –doc switch, a not-really-replacement for perldoc

  * A simple Pod::To::Text output generator

  * and more, of course :)

So, how does it look like in action?$=PODAll the Pod we have written in
our code is now available in the $=POD variable. Example?

  =begin pod
  Some documentation
  =end pod
  
  say $=POD[0].content[0].content;

Results in

  Some documentation

That’s not very useful per se, so how about this one:

  =begin pod
  
  =head1 NAME
  
  A basic pod document
  
  =head2 Running Perl programs
  
  To run a Perl program from the Unix command line:
  
      perl progname.pl
  
  =head2 Things on my desk
  
  There are the following things on my desk right now:
  
  =item A cup of tea
  =item A couple of pens
  =item A stereo
  =item A couple of books
  =item A laptop, obviously
  
  =end pod
  
  DOC INIT {
      use Pod::To::Text;
      say pod2text($=POD);
      exit;
  }
  
  say "I'm just a simple program";

Now what’s the DOC INIT thing? Let’s see. How about we run the above
program:

  $ perl6 foo.pl
  I'm just a simple program

No suprises. Let’s introduce the –doc switch then:

  $ perl6 --doc foo.pl
  NAME
  
  A basic pod document
  
    Running Perl programs
  
  To run a Perl program from the Unix command line:
  
      perl progname.pl
  
    Things on my desk
  
  There are the following things on my desk right now:
  
   * A cup of tea
   * A couple of pens
   * A stereo
   * A couple of books
   * A laptop, obviously

That’s right. The DOC blocks are executed only when the –doc command line
option has been given. At the moment you have to write them yourself, but
maybe even in the nearest few days there will be a default DOC INIT block
doing What You mean all by itself. There we go, a perldoc-alike built-in
:)

WHY

That’s probably the biggest killer feature in the whole project. Although
it’s not yet fully implemented in Rakudo (suprise segfaults here and
there, don’t worry, they’re not permanent :)), it looks pretty much like
this:

  #= our zebra class
  class Zebra {
  ...
  }
  
  say Zebra.WHY # prints: "our zebra class"

Yes yes, a documentation inspection in runtime. See the potential?

  # what was that sub again?
  &amp;sort.WHY.say # get the documentation for the sort() builtin

That opens a way for lots of awesome userspace tools too.

So, what’s still not quite there?

  * .WHY (some cases)

  * Formatting Codes (C&lt;code&gt;, B&lt;bold&gt; etc)

  * DOC use (that can be written as DOC INIT { use … } for now)

  * Default DOC INIT (as mentioned above)

  * A Pod::Parser as a standalone module

With that done, my GSoC project will be finished, and I’ll hopefully have
time to hit some things I was planning to poke in some spare time, for
example:

  * HTML output generator

  * Extending the parser so Synopse 26 can be fully parsed

  * Other fancy userspace tools; I don’t want to spoil the suprise :)

What can I say? Pull it, compile it, play with it, report bugs and have
the appopriate amount of fun :)</description>
      <dc:date>2011-07-31T19:14:11Z</dc:date>
      <dc:subject>gsoc Perl</dc:subject>
      <title>GSoC – The podparser branch has landed</title>
      <pubDate>Sun, 31 Jul 2011 19:14:11 -0000</pubDate>
      <content:encoded>&lt;p&gt;Just a few minutes ago, with a total count of 28 files changed, 1627 insertions and 41 deletions, the podparser branch in which I&amp;#8217;ve been doing my GSoC work has been merged into nom, the current development branch of Rakudo and the soon-to-be master. So, what do we get?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Pod is now parsed, not ignored. The whole parse tree is available in runtime in the $=POD variable&lt;/li&gt;
&lt;li&gt;A basic support for documenting classes and subroutines with #= comments, and the .WHY method on each object returning the attached documentation&lt;/li&gt;
&lt;li&gt;A &amp;#8211;doc switch, a not-really-replacement for perldoc&lt;/li&gt;
&lt;li&gt;A simple Pod::To::Text output generator&lt;/li&gt;
&lt;li&gt;and more, of course :)&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;So, how does it look like in action?&lt;/div&gt;
&lt;div&gt;&lt;strong&gt;$=POD&lt;/strong&gt;&lt;/div&gt;
&lt;div&gt;All the Pod we have written in our code is now available in the $=POD variable. Example?&lt;/div&gt;
&lt;blockquote&gt;
&lt;pre&gt;=begin pod
Some documentation
=end pod

say $=POD[0].content[0].content;&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;div&gt;
Results in&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;Some documentation&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;#8217;s not very useful per se, so how about this one:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;=begin pod

=head1 NAME

A basic pod document

=head2 Running Perl programs

To run a Perl program from the Unix command line:

    perl progname.pl

=head2 Things on my desk

There are the following things on my desk right now:

=item A cup of tea
=item A couple of pens
=item A stereo
=item A couple of books
=item A laptop, obviously

=end pod

DOC INIT {
    use Pod::To::Text;
    say pod2text($=POD);
    exit;
}

say "I'm just a simple program";&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Now what&amp;#8217;s the DOC INIT thing? Let&amp;#8217;s see. How about we run the above program:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;$ perl6 foo.pl
I'm just a simple program&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;No suprises. Let&amp;#8217;s introduce the &lt;strong&gt;&amp;#8211;doc&lt;/strong&gt; switch then:&lt;/p&gt;
&lt;blockquote&gt;
&lt;pre&gt;$ perl6 --doc foo.pl
NAME

A basic pod document

  Running Perl programs

To run a Perl program from the Unix command line:

    perl progname.pl

  Things on my desk

There are the following things on my desk right now:

 * A cup of tea
 * A couple of pens
 * A stereo
 * A couple of books
 * A laptop, obviously&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;That&amp;#8217;s right. The DOC blocks are executed only when the &amp;#8211;doc command line option has been given. At the moment you have to write them yourself, but maybe even in the nearest few days there will be a default DOC INIT block doing What You mean all by itself. There we go, a perldoc-alike built-in :)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;WHY&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That&amp;#8217;s probably the biggest killer feature in the whole project. Although it&amp;#8217;s not yet fully implemented in Rakudo (suprise segfaults here and there, don&amp;#8217;t worry, they&amp;#8217;re not permanent :)), it looks pretty much like this:&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;#= our zebra class
class Zebra {
...
}

say Zebra.WHY # prints: "our zebra class"&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;Yes yes, a documentation inspection in runtime. See the potential?&lt;/p&gt;
&lt;blockquote&gt;&lt;pre&gt;# what was that sub again?
&amp;amp;sort.WHY.say # get the documentation for the sort() builtin&lt;/pre&gt;
&lt;/blockquote&gt;
&lt;p&gt;That opens a way for lots of awesome userspace tools too.&lt;/p&gt;
&lt;p&gt;So, what&amp;#8217;s still not quite there?&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;.WHY (some cases)&lt;/li&gt;
&lt;li&gt;Formatting Codes (C&amp;lt;code&amp;gt;, B&amp;lt;bold&amp;gt; etc)&lt;/li&gt;
&lt;li&gt;DOC use (that can be written as DOC INIT { use &amp;#8230; } for now)&lt;/li&gt;
&lt;li&gt;Default DOC INIT (as mentioned above)&lt;/li&gt;
&lt;li&gt;A Pod::Parser as a standalone module&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;div&gt;With that done, my GSoC project will be finished, and I&amp;#8217;ll hopefully have time to hit some things I was planning to poke in some spare time, for example:&lt;/div&gt;
&lt;div&gt;
&lt;ul&gt;
&lt;li&gt;HTML output generator&lt;/li&gt;
&lt;li&gt;Extending the parser so Synopse 26 can be fully parsed&lt;/li&gt;
&lt;li&gt;Other fancy userspace tools; I don&amp;#8217;t want to spoil the suprise :)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;What can I say? Pull it, compile it, play with it, report bugs and have the appopriate amount of fun :)&lt;/p&gt;&lt;/div&gt;
&lt;br /&gt;  &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/ttjjss.wordpress.com/106/"&gt;&lt;img alt="" src="http://feeds.wordpress.com/1.0/comments/ttjjss.wordpress.com/106/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/ttjjss.wordpress.com/106/"&gt;&lt;img alt="" src="http://feeds.wordpress.com/1.0/delicious/ttjjss.wordpress.com/106/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/ttjjss.wordpress.com/106/"&gt;&lt;img alt="" src="http://feeds.wordpress.com/1.0/facebook/ttjjss.wordpress.com/106/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/ttjjss.wordpress.com/106/"&gt;&lt;img alt="" src="http://feeds.wordpress.com/1.0/twitter/ttjjss.wordpress.com/106/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/ttjjss.wordpress.com/106/"&gt;&lt;img alt="" src="http://feeds.wordpress.com/1.0/stumble/ttjjss.wordpress.com/106/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/ttjjss.wordpress.com/106/"&gt;&lt;img alt="" src="http://feeds.wordpress.com/1.0/digg/ttjjss.wordpress.com/106/"&gt;&lt;/a&gt; &lt;a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/ttjjss.wordpress.com/106/"&gt;&lt;img alt="" src="http://feeds.wordpress.com/1.0/reddit/ttjjss.wordpress.com/106/"&gt;&lt;/a&gt; &lt;img alt="" src="http://stats.wordpress.com/b.gif?host=ttjjss.wordpress.com&amp;amp;blog=15099040&amp;amp;post=106&amp;amp;subd=ttjjss&amp;amp;ref=&amp;amp;feed=1"&gt;</content:encoded>
      <dcterms:modified>2011-07-31T19:14:11Z</dcterms:modified>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://ttjjss.wordpress.com/?p=106</guid>
    </item>
    <item>
      <author>nobody@example.com (Gabor Szabo)</author>
      <dc:creator>nobody@example.com (Gabor Szabo)</dc:creator>
      <category>Mailman, JQuery, JavaScript, Perl, newsletter</category>
      <link>http://szabgab.com/blog/2011/07/how-to-integrate-a-mailman-signup-with-your-web-site.html</link>
      <description>There are many people who prefer to read selected news items over
following 10-30 sources of information. Lot's of us prefer e-mail alerts
over RSS feeds. During the week-end I setup two newsletters.

One is called Perl Weekly sending out a list of the most important news
items and articles regarding Perl.

The other one is an announcement list for my own website. This is for
people who would like to get notified when I upload a new post.

For now they are both Mailman based mailing lists as that was the easiest
to setup without giving up control to a mailing company.

The problem with Mailman is that I need to direct people to a separate
subscribe page that - at least by default - looks very different from my
web site:

[IMAGE]

It could be customized but it still means people need to do extra steps
before they can sign up to the newsletter.

The first thing I did for better integration is to embed the HTML form
that is on the mailman page into my web site but only show one field for
the e-mail address.

This is the HTML:

  &lt;form action="http://mail.szabgab.com/mailman/subscribe/update" method="POST"&gt;
  E-mail: &lt;input name="email" /&gt;&lt;input type="submit" value="Sign Me Up!" /&gt;
  &lt;/form&gt;


And this is how it looks:

E-mail:

If you try that form an click on the button you will see that the result
page is still what Mailman provides.

What about changing that too?

I changed the form so the form will have a class called subscribe &amp;ltform
class="subscribe" and added the following JQuery code:

 $(document).ready(function() {
   $("form.subscribe").submit(function() {
     var url = $(this).attr('action') + '?' + $(this).serialize();
     $.get(url, function(r) {
         window.location = "http://szabgab.com/thankyou.html";
     });
     return false;
   });
 });


Now when the user clicks on the Sign Me Up! button, the above script will
serialzie the data in the form and send a GET request to the mailman
subscribe form. When that replies the JQuery code will load the thank you
page with further instructions.

See how it works on my site:

E-mail:

It still leaves the ugly e-mail that Mailman sends out and the
verification form but at least the first step is more integrated in my
website.

I am not a JQuery or HTML expert. I am probably better described as a
newbie for life. There might be much better ways to make this happen.

How do you integrate e-mail signup to your website?</description>
      <dc:date>2011-07-31T10:49:17Z</dc:date>
      <dc:subject>Mailman, JQuery, JavaScript, Perl, newsletter</dc:subject>
      <title>How to integrate a Mailman signup with your web site?</title>
      <pubDate>Sun, 31 Jul 2011 10:49:17 -0000</pubDate>
      <content:encoded>&lt;p&gt;
There are many people who prefer to read selected news items 
over following 10-30 sources of information. Lot's of us 
prefer e-mail alerts over RSS feeds. 
During the week-end I setup two newsletters.
&lt;/p&gt;
&lt;p&gt;
One is called &lt;a href="http://perlweekly.com/"&gt;Perl Weekly&lt;/a&gt; sending out
a list of the most important news items and articles regarding Perl.
&lt;/p&gt;
&lt;p&gt;
The other one is an announcement list for my own website. This is for people who
would like to get notified when I upload a new post.
&lt;/p&gt;
&lt;p&gt;
For now they are both Mailman based mailing lists as that was the easiest 
to setup &lt;b&gt;without giving up control&lt;/b&gt; to a mailing company.
&lt;/p&gt;
&lt;p&gt;
The problem with Mailman is that I need to direct people to a separate 
subscribe page that - at least by default - looks very different from my web site:
&lt;/p&gt;
&lt;p&gt;
&lt;img src="http://szabgab.com/img/mailman_subscribe.png"&gt;
&lt;/p&gt;
&lt;p&gt;
It could be customized but it still means people need to do &lt;b&gt;extra steps&lt;/b&gt; before
they can sign up to the newsletter.
&lt;/p&gt;
&lt;p&gt;
The first thing I did for better integration is to embed the HTML form that is
on the mailman page into my web site but only show one field for the e-mail address.
&lt;/p&gt;
&lt;p&gt;
This is the HTML:
&lt;/p&gt;
&lt;pre&gt;
  &amp;lt;form action="http://mail.szabgab.com/mailman/subscribe/update" method="POST"&amp;gt;
  E-mail: &amp;lt;input name="email" /&amp;gt;&amp;lt;input type="submit" value="Sign Me Up!" /&amp;gt;
  &amp;lt;/form&amp;gt;

&lt;/pre&gt;
&lt;p&gt;
And this is how it looks:
&lt;/p&gt;
&lt;p&gt;
&lt;form action="http://mail.szabgab.com/mailman/subscribe/update" method="POST"&gt;
E-mail: &lt;input name="email" /&gt; &lt;input value="Sign Me Up!" /&gt;
&lt;/form&gt;
&lt;/p&gt;
&lt;p&gt;
If you try that form an click on the button you will see that the result page
is still what Mailman provides.
&lt;/p&gt;
&lt;p&gt;
What about changing that too?
&lt;/p&gt;
&lt;p&gt;
I changed the form so the form will have a class called &lt;b&gt;subscribe&lt;/b&gt;
&amp;ltform class="subscribe" and added the following 
&lt;a href="http://www.jquery.org/"&gt;JQuery&lt;/a&gt; code:
&lt;/p&gt;
&lt;pre&gt;
 $(document).ready(function() {
   $("form.subscribe").submit(function() {
     var url = $(this).attr('action') + '?' + $(this).serialize();
     $.get(url, function(r) {
         window.location = "http://szabgab.com/thankyou.html";
     });
     return false;
   });
 });

&lt;/pre&gt;
&lt;p&gt;
Now when the user clicks on the &lt;b&gt;Sign Me Up!&lt;/b&gt; button, the above script will serialzie
the data in the form and send a GET request to the mailman subscribe form. 
When that replies the JQuery code will load the &lt;b&gt;thank you&lt;/b&gt; page with further instructions.
&lt;/p&gt;
&lt;p&gt;
See how it works on my site:
&lt;/p&gt;
&lt;p&gt;
&lt;form class="subscribe" action="http://mail.szabgab.com/mailman/subscribe/update" method="POST"&gt;
E-mail: &lt;input name="email" /&gt; &lt;input value="Sign Me Up!" /&gt;
&lt;/form&gt;
&lt;/p&gt;
&lt;p&gt;
It still leaves the ugly e-mail that Mailman sends out and the verification form but
at least the first step is more integrated in my website.
&lt;/p&gt;
&lt;p&gt;
I am not a JQuery or HTML expert. I am probably better described as a newbie for life.
There might be much better ways to make this happen.
&lt;/p&gt;
&lt;p&gt;
How do you integrate e-mail signup to your website?
&lt;/p&gt;
</content:encoded>
      <dcterms:modified>2011-07-31T10:49:17Z</dcterms:modified>
      <guid isPermaLink="false">tag:insel,2006:http://szabgab.com/blog/2011/07/how-to-integrate-a-mailman-signup-with-your-web-site.html</guid>
    </item>
    <item>
      <author>nobody@example.com (rjray)</author>
      <dc:creator>nobody@example.com (rjray)</dc:creator>
      <category>Perl</category>
      <link>http://www.dereferenced.com/2011/07/30/autoloader-considered-harmful/</link>
      <description>Lately, I’ve been doing a lot of work on some of my modules using the
fine Devel::Cover package. And for about two years now, I’ve also been
using Perl::Critic almost religiously (to the point where I’ve introduced
it around $DAY_JOB, and even built them a snazzy web interface for it).
But these two share a common failing: both fall down when they encounter
a module that uses some form of external-file-based auto-loading.

First, let me explain what I’m referring to, for those who might not be
familiar with auto-loading. Perl has this nifty feature called
auto-loading, in which a function that doesn’t exist when it is called
might have the chance to spring into life dynamically. Perl will look for
and invoke a special subroutine called AUTOLOAD in your current
namespace, giving it the name of the subroutine that was just requested
in the special variable $AUTOLOAD (and passing that call’s args list in
@_). You can get the routine by any means that Perl allows: you can
create it on the fly, you can on-demand load a module and add it to your
@ISA search path, etc. One of the most clever uses I saw early on in Perl
5′s life, was Lincoln Stein’s CGI module. In it, he used auto-loading to
define all the HTML shortcut routines from a template, eval‘ing them on
the fly as they were each first called.

In short, this amounts to Perl’s version of C’s dynamic loading,
deferring the loading and compilation of code (well, in the C world you
were just deferring the loading and linking, it was already compiled)
until you needed it. Into to this we introduce the core modules
AutoLoader and AutoSplit. AutoLoader provides for you an AUTOLOAD method
that uses the name of the requested routine and the package it is in to
look for a file by that name under a directory hierarchy within your @INC
path. To compliment this, AutoSplit is used by the build/install process
(be it ExtUtils::MakeMaker or Module::Build, etc.) to look at a module,
determine if it uses AutoLoader, and splits out the routines that were
defined as dynamically-loading into these per-name files. In fact, I got
my break into the world of writing about Perl by writing an article
explaining these two modules for the Perl Journal (alas, I cannot find a
link to the article online). I also made my first contributions to Perl’s
core by fleshing out the docs for these two, as I had been using them at
my then-job to make a 20,000-line module more manageable.

But! I’m clearly not hear to sing the praises of AutoLoader, or I would
have titled this post something else entirely. I don’t necessarily come
here to bury Caesar in lieu of praising him, but introducing AutoLoader
(or SelfLoader, for that matter) gums up the works when you use either of
Devel::Cover or Perl::Critic. And while Devel::Cover might be able to fix
this (I’ve filed a bug, but I don’t know the internals of D::C so I don’t
know if it is addressable), Perl::Critic definitely won’t be able to.

See, AutoLoader/AutoSplit (and SelfLoader, though it uses a slightly
different model) work by having you put the code you want to delay
loading after the __END__ token in your module (__DATA__ in the case of
SelfLoader). AutoSplit can then find it and split it out into individual
files, and as the compiler stops compiling once it hits that token
nothing at that point onward contributes to the start-up compilation
phase. But while this successfully hides the code from the compiler, it
also very successfully hides the code from Perl::Critic and Devel::Cover
as well.

P::C is built on the PPI package by Adam Kennedy, and in terms of a Perl
module as a document anything after __END__ is simply not code and not
going to be processed as such. So your code that uses AutoLoader is not
being fully analyzed by P::C. I had released a version of RPC::XML that I
thought was critic-clean, without having thought about this caveat. When
I later went and commented-out the “use AutoLoader” and “__END__” lines,
I found a whole new set of violations to clear up.

Likewise, I had a similar problem with Devel::Cover. Only slightly worse,
because I assumed that they had already dealt with this problem. The code
gets loaded just like any other Perl module, so I assumed that when it
loaded it then got instrumented. And the code uses “#line” directives to
associate the code with the correct line in the original *.pm file, so I
thought that they would be able to “translate” the line numbers of
coverage statistics back to the originating file. But alas, no— code
after __END__ is just as hidden from D::C as it is from P::C.

Which leaves me wondering whether AutoLoader (and __END__-based
auto-loading in general) might not have run its course of usefulness. I’m
left wondering what sort of hoops the authors of syntax-highlighting for
Emacs had to jump through, to determine that content after __END__ was
actually code rather than data, and to highlight it as such (vim doesn’t,
it leaves it in the same font-face as data). Editors aside, here are two
extremely useful development tools for Perl programmers (remember, I’m
practically religious about P::C, spreading the gospel to my workplace
and anywhere else I can), and both are hampered by the use of
auto-loading. Given the leaps in memory and CPU over the last 15 years or
so since I wrote that first article, do we really need AutoLoader
anymore? I mean, I’m not saying do away with auto-loading itself, it has
a truly useful place in Perl. I’m just not so sure whether we need
AutoLoader (or SelfLoader) like we used to.</description>
      <dc:date>2011-07-30T18:31:51Z</dc:date>
      <dc:subject>Perl</dc:subject>
      <title>AutoLoader Considered Harmful?</title>
      <pubDate>Sat, 30 Jul 2011 18:31:51 -0000</pubDate>
      <content:encoded>&lt;p&gt;Lately, I’ve been doing a lot of work on some of my modules using the fine &lt;a title="Devel::Cover on MetaCPAN.org" href="https://metacpan.org/release/Devel-Cover"&gt;Devel::Cover&lt;/a&gt; package. And for about two years now, I’ve also been using &lt;a title="Perl::Critic at MetaCPAN.org" href="https://metacpan.org/release/Perl-Critic"&gt;Perl::Critic&lt;/a&gt; almost religiously (to the point where I’ve introduced it around $DAY_JOB, and even built them a snazzy web interface for it). But these two share a common failing: both fall down when they encounter a module that uses some form of external-file-based auto-loading.&lt;/p&gt;
&lt;p&gt;First, let me explain what I’m referring to, for those who might not be familiar with auto-loading. Perl has this nifty feature called &lt;a href="http://perldoc.perl.org/perlsub.html#Autoloading"&gt;&lt;em&gt;auto-loading&lt;/em&gt;&lt;/a&gt;, in which a function that doesn’t exist when it is called might have the chance to spring into life dynamically. Perl will look for and invoke a special subroutine called &lt;code&gt;AUTOLOAD&lt;/code&gt; in your current namespace, giving it the name of the subroutine that was just requested in the special variable &lt;code&gt;$AUTOLOAD&lt;/code&gt; (and passing that call’s args list in &lt;code&gt;@_&lt;/code&gt;). You can get the routine by any means that Perl allows: you can create it on the fly, you can on-demand load a module and add it to your &lt;code&gt;@ISA&lt;/code&gt; search path, etc. One of the most clever uses I saw early on in Perl 5′s life, was Lincoln Stein’s &lt;a title="CGI at MetaCPAN.org" href="https://metacpan.org/release/CGI"&gt;CGI&lt;/a&gt; module. In it, he used auto-loading to define all the HTML shortcut routines from a template, &lt;code&gt;eval&lt;/code&gt;‘ing them on the fly as they were each first called.&lt;/p&gt;
&lt;p&gt;In short, this amounts to Perl’s version of C’s dynamic loading, deferring the loading and compilation of code (well, in the C world you were just deferring the loading and linking, it was already compiled) until you needed it. Into to this we introduce the core modules AutoLoader and AutoSplit. AutoLoader provides for you an &lt;code&gt;AUTOLOAD&lt;/code&gt; method that uses the name of the requested routine and the package it is in to look for a file by that name under a directory hierarchy within your &lt;code&gt;@INC&lt;/code&gt; path. To compliment this, AutoSplit is used by the build/install process (be it ExtUtils::MakeMaker or Module::Build, etc.) to look at a module, determine if it uses AutoLoader, and splits out the routines that were defined as dynamically-loading into these per-name files. In fact, I got my break into the world of writing about Perl by writing an article explaining these two modules for the &lt;em&gt;Perl Journal&lt;/em&gt; (alas, I cannot find a link to the article online). I also made my first contributions to Perl’s core by fleshing out the docs for these two, as I had been using them at my then-job to make a 20,000-line module more manageable.&lt;/p&gt;
&lt;p&gt;But! I’m clearly not hear to sing the praises of AutoLoader, or I would have titled this post something else entirely. I don’t necessarily come here to bury Caesar in lieu of praising him, but introducing AutoLoader (or &lt;a href="http://perldoc.perl.org/SelfLoader.html"&gt;SelfLoader&lt;/a&gt;, for that matter) gums up the works when you use either of Devel::Cover or Perl::Critic. And while Devel::Cover &lt;em&gt;might&lt;/em&gt; be able to fix this (I’ve filed a bug, but I don’t know the internals of D::C so I don’t know if it is addressable), Perl::Critic definitely won’t be able to.&lt;/p&gt;
&lt;p&gt;See, AutoLoader/AutoSplit (and SelfLoader, though it uses a slightly different model) work by having you put the code you want to delay loading after the &lt;code&gt;__END__&lt;/code&gt; token in your module (&lt;code&gt;__DATA__&lt;/code&gt; in the case of SelfLoader). AutoSplit can then find it and split it out into individual files, and as the compiler stops compiling once it hits that token nothing at that point onward contributes to the start-up compilation phase. But while this successfully hides the code from the compiler, it also &lt;em&gt;very&lt;/em&gt; successfully hides the code from Perl::Critic and Devel::Cover as well.&lt;/p&gt;
&lt;p&gt;P::C is built on the &lt;a title="PPI at MetaCPAN.org" href="https://metacpan.org/release/PPI"&gt;PPI&lt;/a&gt; package by Adam Kennedy, and in terms of a Perl module as a document anything after &lt;code&gt;__END__&lt;/code&gt; is simply not code and not going to be processed as such. So your code that uses AutoLoader is &lt;em&gt;not&lt;/em&gt; being fully analyzed by P::C. I had released a version of &lt;a title="RPC::XML at MetaCPAN.org" href="https://metacpan.org/release/RPC-XML"&gt;RPC::XML&lt;/a&gt; that I thought was critic-clean, without having thought about this caveat. When I later went and commented-out the “&lt;code&gt;use AutoLoader&lt;/code&gt;” and “&lt;code&gt;__END__&lt;/code&gt;” lines, I found a whole new set of violations to clear up.&lt;/p&gt;
&lt;p&gt;Likewise, I had a similar problem with Devel::Cover. Only slightly worse, because I assumed that they had already dealt with this problem. The code gets loaded just like any other Perl module, so I assumed that when it loaded it then got instrumented. And the code uses “&lt;code&gt;#line&lt;/code&gt;” directives to associate the code with the correct line in the original *.pm file, so I thought that they would be able to “translate” the line numbers of coverage statistics back to the originating file. But alas, no— code after __END__ is just as hidden from D::C as it is from P::C.&lt;/p&gt;
&lt;p&gt;Which leaves me wondering whether AutoLoader (and &lt;code&gt;__END__&lt;/code&gt;-based auto-loading in general) might not have run its course of usefulness. I’m left wondering what sort of hoops the authors of syntax-highlighting for Emacs had to jump through, to determine that content after &lt;code&gt;__END__&lt;/code&gt; was actually code rather than data, and to highlight it as such (vim doesn’t, it leaves it in the same font-face as data). Editors aside, here are two &lt;em&gt;extremely&lt;/em&gt; useful development tools for Perl programmers (remember, I’m practically religious about P::C, spreading the gospel to my workplace and anywhere else I can), and both are hampered by the use of auto-loading. Given the leaps in memory and CPU over the last 15 years or so since I wrote that first article, do we really need AutoLoader anymore? I mean, I’m not saying do away with auto-loading itself, it has a truly useful place in Perl. I’m just not so sure whether we need AutoLoader (or SelfLoader) like we used to.&lt;/p&gt;
</content:encoded>
      <dcterms:modified>2011-07-30T18:31:51Z</dcterms:modified>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://www.dereferenced.com/?p=163</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/feature-comparison-matrix.html</link>
      <description>We now have a nice table that tells you which Perl 6 compiler implements
what..

Such a thing was long overdue. When the topic came up in the past, people
have suggested mostly automated solutions that compared test coverage of
compiles to generate such a table. Nothing came out of it, it would have
been a rather large endeavor. Now Eevee blogged about the lack of some
easy overview that tells you what is implemented in Rakudo., and I
thought it was time to tackle the problem.

Instead of some advanced automated system, we now have a simple text file,
and a short perl script that converts it to a HTML page.

I'd like to thanks Will Coleda, Patrick Michaud and Stefan O'Rear for
their contributions, and encourage everybody to keep the data up to date.</description>
      <title>Perl 6 Compiler Feature Matrix</title>
      <content:encoded>

&lt;p&gt;We now have a &lt;a href="http://perl6.org/compilers/features"&gt;nice table that
tells you which Perl 6 compiler implements what.&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Such a thing was long overdue. When the topic came up in the past, people
have suggested mostly automated solutions that compared test coverage of
compiles to generate such a table. Nothing came out of it, it would have been
a rather large endeavor. Now Eevee blogged about &lt;a href="http://me.veekun.com/blog/2011/07/22/perls-of-wisdom/#fixing-perl-6"&gt;the
lack of some easy overview that tells you what is implemented in Rakudo.&lt;/a&gt;,
and I thought it was time to tackle the problem.&lt;/p&gt;

&lt;p&gt;Instead of some advanced automated system, we now have a &lt;a href="https://github.com/perl6/features/blob/master/features.txt"&gt;simple text
file&lt;/a&gt;, and a &lt;a href="https://github.com/perl6/features/blob/master/process.pl"&gt;short perl
script&lt;/a&gt; that converts it to a HTML page.&lt;/p&gt;

&lt;p&gt;I'd like to thanks Will Coleda, Patrick Michaud and Stefan O'Rear for their
contributions, and encourage everybody to keep the data up to date.&lt;/p&gt;


</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/feature-comparison-matrix.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/how-fast-is-nom.html</link>
      <description>Nearly one year ago, the Rakudo Perl 6 developers proudly released the
first Rakudo Star, a distribution aimed at showing the world what Perl 6
can look like, and in turn get feedback from more early adaptors.

And feedback we got. While the overall response was very positive, people
had one main concern: it was too slow. That didn't come as a surprise,
considering that we had focused on features first. Now it was time to
change that, and work on massive performance improvements.

That is easier said than done. One of the reasons is that Rakudo is
tightly coupled to the parrot virtual machine, but there is a lot of
mismatch between the two. For example parrot provides multi dispatch
built-in, but not quite with the semantics that Perl 6 needs. Same for
parameter binding, objects and a number of other areas.

In the following year, parrot got a new, faster garbage collector, and
Jonathan Worthington came up with a cache for type checks at routine call
time.

This sped up this simple mandelbrot fractal generator at size 201x201
from 18 minutes to 16 minutes 14 seconds. Actually the speedup was better
than that, but we paid a performance penalty for new features, bug fixes
and parrot performance regressions.

But it was clear that more substantial improvements where needed. One of
the most promising candidates for speedups is a complete redesign of the
object model, resulting in the "nom" (new object model) branch of Rakudo.
Additionally to providing much more well suited OO primitives than parrot
can offer right now, it also allows to share more information between
compile time and run time, making a lot of optimizations possible.

Yesterday I sped up some operations on Complex numbers, and implemented a
built-in that was missing to run the mandelbrot script. And today I timed
it: 3 Minutes. From originally 18 Minutes.

Now that's a speedup by more than a factor of 5. I'm not sure if it will
extend to other operators, but it sure is encouraging.

And that's without the optimizations that will now be possible, for
example inlining operators. So after a literally slow start, Rakudo Perl
6 has a bright and fast future ahead. And it's already here, just not
evenly distributed.</description>
      <title>How fast is Rakudo's "nom" branch?</title>
      <content:encoded>
&lt;p&gt;Nearly one year ago, the &lt;a href="http://rakudo.org/"&gt;Rakudo Perl 6&lt;/a&gt;
developers proudly released the first &lt;a href="http://rakudo.org/2010/07/29/rakudo-star-2010-07/"&gt;Rakudo Star&lt;/a&gt;, a
distribution aimed at showing the world what Perl 6 can look like, and in turn
get feedback from more early adaptors.&lt;/p&gt;

&lt;p&gt;And feedback we got. While the overall response was very positive, people
had one main concern: it was too slow. That didn't come as a surprise,
considering that we had focused on features first. Now it was time to change
that, and work on massive performance improvements.&lt;/p&gt;

&lt;p&gt;That is easier said than done. One of the reasons is that Rakudo is tightly
coupled to &lt;a href="http://parrot.org/"&gt;the parrot virtual machine&lt;/a&gt;, but
there is a lot of mismatch between the two. For example parrot provides multi
dispatch built-in, but not quite with the semantics that Perl 6 needs. Same
for parameter binding, objects and a number of other areas.&lt;/p&gt;

&lt;p&gt;In the following year, parrot got a new, faster garbage collector, and
Jonathan Worthington came up with a cache for type checks at routine call
time.&lt;/p&gt;

&lt;p&gt;This sped up this simple &lt;a href="https://github.com/colomon/mandelbrot/blob/master/bin/mandelbrot-color.pl"&gt;mandelbrot fractal
generator&lt;/a&gt; at size 201x201 from 18 minutes to 16 minutes 14 seconds.
Actually the speedup was better than that, but we paid a performance penalty
for new features, bug fixes and parrot performance regressions.&lt;/p&gt;

&lt;p&gt;But it was clear that more substantial improvements where needed.
One of the most promising candidates for
speedups is a
&lt;a href="http://6guts.wordpress.com/"&gt;complete redesign of the object
model&lt;/a&gt;, resulting in the &lt;a href="http://pmthium.com/2011/02/08/new-nqp-repository-new-nom-rakudo-branch/"&gt;"nom"
(new object model) branch&lt;/a&gt; of Rakudo. Additionally to providing much more
well suited OO primitives than parrot can offer right now, it also allows to
share more information between compile time and run time, making a lot of
optimizations possible.&lt;/p&gt;

&lt;p&gt;Yesterday I &lt;a href="https://github.com/rakudo/rakudo/commit/437675e330460d0cf801d48a635c413d532e062f"&gt;sped
up some operations on Complex numbers&lt;/a&gt;, and implemented a built-in that was
missing to run the mandelbrot script. And today I timed it: 3 Minutes. From
originally 18 Minutes.&lt;/p&gt;

&lt;p&gt;Now that's a speedup by more than a factor of 5. I'm not sure if it will
extend to other operators, but it sure is encouraging.&lt;/p&gt;

&lt;p&gt;And that's without the optimizations that will now be possible, for example
inlining operators. So after a literally slow start, Rakudo Perl 6 has a
bright and fast future ahead. And it's already here, just not evenly
distributed.&lt;/p&gt;

 
</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/how-fast-is-nom.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/thoughts-on-p6cc.html</link>
      <description>Masak's Perl 6 Coding Contest (short p6cc) is now in its final stage -
the public commentary of solutions. So far masak has commented on p1, p2,
and p3. I enjoyed the reviews and explanations so far, and look forward
to more (except to the p4 review, because I botched the solution to this
one).

The reviews made a good read, and here are only a few very minor points
that I find worth mentioning. No criticism intended (neither to the
author nor the reviewer).

  * Matthias' p1 solution uses side effects in subroutine named to-string.
    I would avoid that in "production" code (for whatever I might mean
    with that word...), since it's not what I would expect from the name.
    Instead of a counter, the array indexes could be used to identify
    which matrix to stringify.

  * Masak's review of fox' p1 solution contains the question I wonder why
    the @items array deserved a plural but the @matrix only a singular....
    I'd say that's because @matrix holds one matrix, but @items holds
    many items. Speaking of which, I don't like the name @matrix - it
    describe a structure rather than the contents. The structure becomes
    pretty obvious through the access, but what is in the matrix?

  *  After viewing my own p1 submission without syntax hilighting, I
    wonder why I chose so many double blank lines. My vim color scheme
    uses a dark blue for comments, which means that comment blocks need
    more visual distance from code, in my personal opinion. But when
    sharing code, I shouldn't make layout decisions based on non-shared
    syntax hilighting.

  * colomon's p2 submission uses complex numbers for coordinates. I
    considered that myself, and there's nothing wrong with it. Just
    strange that he then reinvented subtraction of two complex numbers in
    sub lines-intersect. Maybe he didn't want to come up with names for
    the intermediate results, $slope and $axes-intercept might have been
    viable ones.

  * Matthias could have simplified comb: /&lt;&amp;number&gt;/ to just comb:
    &amp;number -- a regex is just a callable, and when it's explicit in the
    current scope, you can just use a hard reference to it.

  * colomon's p3 solution could, as far as I can tell, replace all
    regexes with tokens - less backtracking, fewer surprises.

  * Reviewing my own p3 solution, masak asked I wonder what stopped
    moritz from, rather than doing $_ &amp;&amp; .including on line 39, doing
    .?including instead. Either he considered that too cute, or he didn't
    consider it. I did consider it, but I decided against it, because the
    two things are subtly different. Mine only calls the method if the
    topic is true, whereas .?including always tries the call - even on a
    type object, where accessing an attribute leads to a fatal error. I
    think in my code that case doesn't show up, but it did appear during
    debugging in earlier versions.</description>
      <title>Thoughts on masak's Perl 6 Coding Contest</title>
      <content:encoded>

&lt;p&gt;&lt;a href="http://strangelyconsistent.org/blog/masaks-perl-6-coding-contest"&gt;Masak's
Perl 6 Coding Contest&lt;/a&gt; (short p6cc) is now in its final stage - the public
commentary of solutions. So far masak has commented on &lt;a href="http://strangelyconsistent.org/blog/p1-best-way-to-multiply-a-chain-of-matrices"&gt;p1&lt;/a&gt;, &lt;a href="http://strangelyconsistent.org/blog/p2-is-the-point-in-the-polygon"&gt;p2,&lt;/a&gt;
and &lt;a href="http://strangelyconsistent.org/blog/p3-is-the-integer-in-the-rangeset"&gt;p3&lt;/a&gt;.
I enjoyed the reviews and explanations so far, and look forward to more
(except to the p4 review, because I botched the solution to this one).&lt;/p&gt;

&lt;p&gt;The reviews made a good read, and here are only a few very minor points
that I find worth mentioning. No criticism intended (neither to the author nor
the reviewer).&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;&lt;a href="http://strangelyconsistent.org/p6cc2010/p1-matthias/"&gt;Matthias'
        p1 solution&lt;/a&gt; uses side effects in subroutine named
        &lt;code&gt;to-string&lt;/code&gt;. I would avoid that in "production" code (for
        whatever I might mean with that word...), since it's not what I would
        expect from the name. Instead of a counter, the array indexes could be
        used to identify which matrix to stringify.
    &lt;/li&gt;
    &lt;li&gt;Masak's review of &lt;a href="http://strangelyconsistent.org/p6cc2010/p1-fox/"&gt;fox' p1
        solution&lt;/a&gt; contains the question &lt;em&gt;I wonder why the @items array
        deserved a plural but the @matrix only a singular...&lt;/em&gt;. I'd say
        that's because &lt;code&gt;@matrix&lt;/code&gt; holds one matrix, but
        &lt;code&gt;@items&lt;/code&gt; holds many items. Speaking of which, I don't like
        the name &lt;code&gt;@matrix&lt;/code&gt; - it describe a structure rather than
        the contents. The structure becomes pretty obvious through the access,
        but what is in the matrix?
     &lt;/li&gt;
     &lt;li&gt;
        After viewing &lt;a href="http://strangelyconsistent.org/p6cc2010/p1-moritz/"&gt;my own p1
        submission&lt;/a&gt; without syntax hilighting, I wonder why I chose so many
        double blank lines. My vim color scheme uses a dark blue for comments,
        which means that comment blocks need more visual distance from code,
        in my personal opinion. But when sharing code, I shouldn't make layout
        decisions based on non-shared syntax hilighting.
    &lt;/li&gt;
    &lt;li&gt;
        &lt;a href="http://strangelyconsistent.org/p6cc2010/p2-colomon/"&gt;colomon's
        p2 submission&lt;/a&gt; uses complex numbers for coordinates. I considered
        that myself, and there's nothing wrong with it. Just strange that he
        then reinvented subtraction of two complex numbers in sub
        &lt;code&gt;lines-intersect&lt;/code&gt;. Maybe he didn't want to come up with
        names for the intermediate results, &lt;code&gt;$slope&lt;/code&gt; and
        &lt;code&gt;$axes-intercept&lt;/code&gt; might have been viable ones.
    &lt;/li&gt;
    &lt;li&gt;
        &lt;a href="http://strangelyconsistent.org/p6cc2010/p2-matthias/"&gt;Matthias&lt;/a&gt;
        could have simplified &lt;code&gt;comb: /&amp;lt;&amp;amp;number&amp;gt;/&lt;/code&gt; to just
        &lt;code&gt;comb: &amp;amp;number&lt;/code&gt; -- a regex is just a callable, and when
        it's explicit in the current scope, you can just use a hard reference
        to it.
    &lt;/li&gt;
    &lt;li&gt;
        &lt;a href="http://strangelyconsistent.org/p6cc2010/p3-colomon/"&gt;colomon's
        p3 solution&lt;/a&gt; could, as far as I can tell, replace all regexes with
        tokens - less backtracking, fewer surprises.
    &lt;/li&gt;
    &lt;li&gt;Reviewing &lt;a href="http://strangelyconsistent.org/p6cc2010/p3-moritz/"&gt;my own p3
        solution&lt;/a&gt;, masak asked &lt;em&gt;I wonder what stopped moritz from,
        rather than doing $_ &amp;&amp; .including on line 39, doing .?including
        instead. Either he considered that too cute, or he didn't consider
        it.&lt;/em&gt; I did consider it, but I decided against it, because the two
        things are subtly different.  Mine only calls the method if the topic is
        true, whereas &lt;code&gt;.?including&lt;/code&gt; always tries the call - even on a
        type object, where accessing an attribute leads to a fatal error. I
        think in my code that case doesn't show up, but it did appear during
        debugging in earlier versions.
    &lt;/li&gt;

&lt;/ul&gt;


</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/thoughts-on-p6cc.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/misc/introducing-quelology.html</link>
      <description>For about half a year I've been working on a website called quelology,
which collects book series and translations.

It is intended to answer questions of the form: I've now read "Harry
Potter and the Order of the Phoenix", which is the next book in that
series? or What's the name of the French translation of that book?

The website and data mining behind it are written in Perl, and it is
based on book meta data by isfdb, amazon and worldcat.

I'm working on importing data from more sources, next up will be the
Swedish National Library.

After completing the data mining stage, I'll add an interfaces that
allows the visitor to edit the book, series and translations data, so
that users can extend the data body.</description>
      <title>Introducing my new project: Quelology organizes books</title>
      <content:encoded>
&lt;p&gt;For about half a year I've been working on a website called &lt;a href="http://quelology.org/"&gt;quelology&lt;/a&gt;, which collects book series and
translations.&lt;/p&gt;

&lt;p&gt;It is intended to answer questions of the form:
&lt;a href="http://quelology.org/t/9684"&gt;I've now read "Harry Potter and the Order of the Phoenix",
which is the next book in that series?&lt;/a&gt; or
&lt;a href="http://quelology.org/t/9681"&gt;What's the name of the French translation of that book?&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The website and data mining behind it are written in Perl, and it is based on book meta data by &lt;a href="http://www.isfdb.org/cgi-bin/index.cgi"&gt;isfdb&lt;/a&gt;, amazon and &lt;a href="http://www.worldcat.org/"&gt;worldcat&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I'm working on importing data from more sources, next up will be the
&lt;a href="http://libris.kb.se/"&gt;Swedish National Library&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;After completing the data mining stage, I'll add an interfaces that allows
the visitor to edit the book, series and translations data, so that users can extend the data body.&lt;/p&gt;


</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/misc/introducing-quelology.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/foray-into-p5-land.html</link>
      <description>Usually I use Perl 6 as my programming language of choice. But about a
week ago I started to plan and code an application for which the richness
of the Perl 5 ecosystem outmatch the design weaknesses of Perl 5,
compared to Perl 6.

I have quite a bit of Perl 5 experience too, but so far I mostly used it
for smallish tasks, and didn't have too much use for many frameworks.

Here is a list of some tools I used, and my experience with them. I hope
that my experiences can help the Perl 5 community to improve some edges
here and there, and serve as an inspiration for Perl 6 modules authors
what problems to approach.


cpanminus - painless module installation.
-----------------------------------------

cpanminus gives easy access to the wealth of the CPAN. The module
installation worked perfectly without any configuration or interaction.

Just when a XML parser had a dependency on an external C header file
(expat.h), a module installation failed. Since Perl modules don't have a
way to declare external dependencies, that's probably as good as a module
installer can work. Kudos! The only improvement I can think of is
directly showing the error message, instead of having it to dig up from a
log file. I don't know if there's an easy way to automate that though.


DBIx::Class for the database
----------------------------

I store data in a postgresql database. From lowest to highest
abstraction, the Perl modules involved are DBD::Pg (the database driver),
DBI (the driver-independent database interface) and DBIx::Class, an
object relational mapper.

Postgres itself is fantastic, and DBD::Pg and DBI look rock solid to me.
I've worked with DBIx::Class before, and liked it. Upon rereading the
documentation, I found that since my last usage the recommended usage
pattern has changed. Writing result classes into the Result::MyClass
namespace and result set into ResultSet::MyClass has made the result sets
more accessible. Since they are a key feature of DBIx-Class, I welcome
this change, and adopted it very naturally.

A small left-over from the previous scheme made the transition a tad
harder than it had to, but upon reporting it on the #dbix-class IRC
channel (on irc.perl.org), I immediately got commit access, and fixed it
in the source.

Since I deal with trees, I was happy to discover a DBIx::Class plugin for
nested sets. I was less happy to discover that it broke basic object
creation, and had a bug that prevented merging of trees, a feature
advertised in the documentation. Luckily both were very easy to patch,
the patches now live in the bug tracker. I hope the maintainer applies
them soon.

The nested set extension comes with a good test suite, but it seems it
hasn't had much real world usage. I think that with some more usage (and
maybe a few more bug fixes), it'll turn into a very good module.


Mojolicious for the web frontend
--------------------------------

While waiting for the Catalyst dependencies to install, I decided on a
whim to try out Mojolicious, a new-ish web framework. Or more precisely
Mojolicious::Lite, a simplified API that lets you keep the whole
application in a single file.

Now there were a lot of small, rough spots in Mojolicious. The community
on IRC was very helpful, and asked me to record my findings on a wiki
page - which I did.

What really bugs me about Mojolicious is that the built-in template
system produces very incomprehensible error messages. It uses a mixture
of verbatim text and perl code, separated by tags with various semantics
(for example tags that just execute code, those that execute and insert
the result, optionally with HTML/XML escaping).

Unfortunately that means that the code you write differs from the code
that perl executes, which makes the error messages pretty useless.

My first suggestion to improve that situation is to display the generated
code in the error message, in addition to the template code (and make the
generated code as simple as possible.

If the generated code is non-trivial, it would help to add some markup to
distinguish the user-written code from the code that the generator adds
around it. I have no idea how easy or hard that would be to implement,
though.


Conclusions
-----------

The Perl 5 modules were mostly very easy to use, and the corresponding
communities very attentive and helpful.

If there's something the authors can learn from Perl 6, then it's a love
for better error messages.

The Perl 6 world can aspire for such a rich and easy-to-use module
system.</description>
      <title>A Foray into Perl 5 land</title>
      <content:encoded>

&lt;p&gt;Usually I use &lt;a href="http://perl6.org/"&gt;Perl 6&lt;/a&gt; as my programming
language of choice. But about a week ago I started to plan and code an
application for which the richness of the Perl 5 ecosystem outmatch the design
weaknesses of Perl 5, compared to Perl 6.&lt;/p&gt;

&lt;p&gt;I have quite a bit of Perl 5 experience too, but so far I mostly used it
for smallish tasks, and didn't have too much use for many frameworks.&lt;/p&gt;

&lt;p&gt;Here is a list of some tools I used, and my experience with them. I hope
that my experiences can help the Perl 5 community to improve some edges here
and there, and serve as an inspiration for Perl 6 modules authors what
problems to approach.&lt;/p&gt;

&lt;h2&gt;cpanminus - painless module installation.&lt;/h2&gt;

&lt;p&gt;&lt;a href="http://search.cpan.org/perldoc?App::cpanminus"&gt;cpanminus&lt;/a&gt; gives
easy access to the wealth of &lt;a href="http://search.cpan.org/"&gt;the CPAN&lt;/a&gt;.
The module installation worked perfectly without any configuration or
interaction.&lt;/p&gt;

&lt;p&gt;Just when a XML parser had a dependency on an external C header
file (expat.h), a module installation failed. Since Perl modules don't have a
way to declare external dependencies, that's probably as good as a module
installer can work. Kudos! The only improvement I can think of is directly
showing the error message, instead of having it to dig up from a log file. I
don't know if there's an easy way to automate that though.&lt;/p&gt;

&lt;h2&gt;DBIx::Class for the database&lt;/h2&gt;

&lt;p&gt;I store data in a postgresql database. From lowest to highest abstraction,
the Perl modules involved are DBD::Pg (the database driver), DBI (the
driver-independent database interface) and &lt;a href="http://search.cpan.org/perldoc?DBIx::Class"&gt;DBIx::Class&lt;/a&gt;, an
object relational mapper.&lt;/p&gt;

&lt;p&gt;Postgres itself is fantastic, and DBD::Pg and DBI look rock solid to me.
I've worked with DBIx::Class before, and liked it. Upon rereading the
documentation, I found that since my last usage the recommended usage pattern
has changed. Writing result classes into the &lt;code&gt;Result::MyClass&lt;/code&gt;
namespace and result set into &lt;code&gt;ResultSet::MyClass&lt;/code&gt; has made the
result sets more accessible. Since they are a key feature of DBIx-Class, I
welcome this change, and adopted it very naturally.&lt;/p&gt;

&lt;p&gt;A small left-over from the previous scheme made the transition a tad harder
than it had to, but upon reporting it on the #dbix-class IRC channel (on
irc.perl.org), I immediately got commit access, and fixed it in the
source.&lt;/p&gt;

&lt;p&gt;Since I deal with trees, I was happy to discover &lt;a href="http://search.cpan.org/perldoc?DBIx::Class::Tree::NestedSet"&gt;a
DBIx::Class plugin for nested sets&lt;/a&gt;. I was less happy to discover that it
broke basic object creation, and had a bug that prevented merging of trees,
a feature advertised in the documentation. Luckily both were very easy to
patch, the patches now live &lt;a href="https://rt.cpan.org/Public/Dist/Display.html?Name=DBIx-Class-Tree-NestedSet"&gt;in
    the bug tracker&lt;/a&gt;. I hope the maintainer applies them soon.&lt;/p&gt;

&lt;p&gt;The nested set extension comes with a good test suite, but it seems it
hasn't had much real world usage. I think that with some more usage (and maybe
a few more bug fixes), it'll turn into a very good module.&lt;/p&gt;

&lt;h2&gt;Mojolicious for the web frontend&lt;/h2&gt;

&lt;p&gt;While waiting for the &lt;a href="http://www.catalystframework.org/"&gt;Catalyst&lt;/a&gt; dependencies to install, I
decided on a whim to try out &lt;a href="http://search.cpan.org/perldoc?Mojolicious"&gt;Mojolicious&lt;/a&gt;, a new-ish
web framework. Or more precisely &lt;a href="http://search.cpan.org/perldoc?Mojolicious::Lite"&gt;Mojolicious::Lite&lt;/a&gt;,
a simplified API that lets you keep the whole application in a single
file.&lt;/p&gt;

&lt;p&gt;Now there were a lot of small, rough spots in Mojolicious. The community on
IRC was very helpful, and asked me to record my findings on a wiki page - &lt;a href="https://github.com/kraih/mojo/wiki/Newby-Notes"&gt;which I did&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;What really bugs me about Mojolicious is that the built-in template system
produces very incomprehensible error messages. It uses a mixture of verbatim
text and perl code, separated by tags with various semantics (for example tags
that just execute code, those that execute and insert the result, optionally
with HTML/XML escaping).&lt;/p&gt;

&lt;p&gt;Unfortunately that means that the code you write differs from the code that
perl executes, which makes the error messages pretty useless.&lt;/p&gt;

&lt;p&gt;My first suggestion to improve that situation is to display the generated
code in the error message, in addition to the template code (and make the generated code as simple as possible.&lt;/p&gt;

&lt;p&gt;If the generated code is non-trivial, it would help to add some markup to
distinguish the user-written code from the code that the generator adds around
it. I have no idea how easy or hard that would be to implement, though.&lt;/p&gt;

&lt;h2&gt;Conclusions&lt;/h2&gt;

&lt;p&gt;The Perl 5 modules were mostly very easy to use, and the corresponding
communities very attentive and helpful.&lt;/p&gt;

&lt;p&gt;If there's something the authors can learn from Perl 6, then it's a love
for better error messages.&lt;/p&gt;

&lt;p&gt;The Perl 6 world can aspire for such a rich and easy-to-use module
system.&lt;/p&gt;


</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/foray-into-p5-land.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/perl-6-in-2010.html</link>
      <description>2010 has been a busy year for the Perl 6 developers, and came with a
noticeable distribution release, many new modules and much fun for the
people involved. Here's a short, subjective reflection of this year's
Perl 6 events.


Specification
-------------

While some specification changes had substantial impact on the compiler
writers (and were usually in turn triggered by their worries), the user
mostly saw maturing of experimental features, smoothed APIs and some few
new features.


Lists, lists, lists

Just as last year, there were a lot of discussions on how lists and
related types worked. Much of it was driven by the efforts to implement
proper lazy lists in Rakudo.

The result is a much more solid list model, which uses immutable
iterators under the hood - a fact that is hidden quite well from the
user.

The sequence operator (previously known as "series operator") is a
powerful tool for creating lazy lists. It has been extensively refactored
to solve problems both with its implementation and usage. It now takes an
optional closure left of the ... operator, and a limit that terminates
the sequence if it matches true:

# Lazy list of Fibonacci numbers up to (but excluding) 100:my @fib := 1, 2, *+* ...^ * &gt;= 100;


Date and Time

After several iterations, excessive bikeshedding and serious hacking,
Perl 6 now has built-in classes for handling times and dates. They are
inspired by the DateTime and Date::Simple Perl 5 modules. The biggest
difference is probably that DateTime objects are immutable in Perl 6.

This part of the specification is implemented completely in Rakudo.


Zip meta operator

The Z zip operator can now also act as a meta operator. Thus an easy way
to add two lists pairwise and lazily is now

my @sum = @list1 Z+ @list2;


Other changes

  * The .pick method, which randomly takes one or more elements from
    lists and hashes, has been split up into two: @a.pick(3) returns 3
    distinct, random items from array @a, while @a.roll(3) does three
    independent random choices, resulting in possible duplicates in the
    result list.

  * The scoping of lexical multi routines and their protos has been
    clarified and overhauled (see this discussion of what was wrong
    previously, and the resolution).

  * The numeric roles, buffers and Whatever type have received
    significant updates


Community
---------

In 2010 we had a remarkable influx of friendly, interested, skilled and
enthused newcomers to the Perl 6 community. This is the result of
increased marketing outside the Perl community, well publicized releases,
great technology and a friendly community.


Community expansion

Two challenges or contests have been announced this year.

Moritz Lenz published a series of "weekly" challenges, guided tasks to
implement something that the Perl 6 community needs: A website for the
ecosystem, a feature in a compiler and other small things that could be
tackled without much prior knowledge.

The overall response was very good, and several people used it as a quick
start into the Perl 6 community, and stayed.

Towards the end of the year, Carl Mäsak announced his Perl 6 coding
contest. The submitter with the best solutions to five well known
programming tasks is to win 100€ worth of books.

Another far-reaching project was the Perl 6 advent calendar for 2010,
which attracted more than forty thousand visitors .

In an attempt to make Perl 6 compilers easier available to the masses,
John Harrison implemented a web frontend to the Rakudo REPL and made it
available at try.rakudo.org.


Conferences

There was a big Perl 6 hackathon (though we had more discussions than
hacking) at YAPC::EU 2010 in Pisa. Many Perl 6 contributors, compiler
writers and users met and discussed pressing topics in the realms of
specification, implementation roadmap, measuring progress and community
management. See the meeting notes for details.

Of course there were also some Perl 6 talks at YAPC::EU, many of which
seemed well received by the audience.

Perl 6 talks were also held at the Netherlands Perl Workshop,
YAPC::Russia, Norwegian Unix User Group and OSDC France, as well as many
other conferences which the author forgot :-).


Repository changes

Due to neglected maintenance, the Pugs repository had to be shut down. It
has been migrated to git, and split up into several repositories under
the perl6 organization on github. Notable parts include:

roast 
      the Perl 6 test suite

specs 
      the specification

perl6.org
      the main Perl 6 website

modules.perl6.org
      the Perl 6 modules website

ecosystem
      the module list repository

mu    
      the remnants of the old pugs repository

While the transition was mostly ad-hoc and not really planned for, most
of the resulting confusion could be resolved fairly quickly.


Module ecosystem
----------------

While we still lack a proper module distribution system, we now have a
website of known Perl 6 modules and a module installer.

But most importantly the number of modules and module authors is steadily
increasing (82 known Perl 6 modules at the time of writing, compared to
45 last year). While we still lack the wealth of the Perl 5 ecosystem,
there are now database modules, HTTP client and server modules,
serialization, file handling tools and so on.


Implementations
---------------


Rakudo

Most importantly, this year saw the first Rakudo Star release. Rakudo
star is a distribution of the Rakudo compiler, modules and documentation.
While it is still a kind of preview release, some few production usages
of the Rakudo Perl 6 compiler and distribution have been spotted in the
wake of this release.

Also a good part of the Rakudo code based has been replaced during a
major refactor, which bases Rakudo on top of a new grammar engine.

Major improvements to the compiler include

  * an implementation of lazy lists

  * lexical classes and roles

  * Perl 6 level stack traces

  * much more solid meta object model, which allows the user to create
    and modify classes programmatically at run time

  * implementation of the s/search/replace/ and s[search] = replace()
    syntactic features, along with several new regex adverbs and variable
    interpolation into regexes

  * improved interpolation in double-quoted strings: array and hash
    variables now properly interpolate when the expression ends in a
    bracketing construct

  * an improved read-evaluation-print loop, which now remembers variables
    from previous lines, and also automatically prints the result if no
    output was produced

  * multi level array and hash autovivification

  * binding and read-only binding of variables

  * a solid implementation of the DateTime and Date classes

  * MAIN and USAGE subroutines

  * the magic $*ARGFILES file handle and get (comparable to while (&lt;&gt;) {
    ... } in Perl 5)

  * an implementation of basic feed operators

During YAPC::EU the Rakudo contributors decided to target multiple
virtual machines: besides the current parrot backend we want to support
at least the CLR (.NET).

With this goal in mind, and the need for major performance improvements,
Jonathan Worthington prototyped a new, efficient meta object model for
parrot in C#, and used that as a base for the new CLR backend. He got
help from Matthew Wilson, and Martin Berends started porting the effort
to the JVM. Jonathan explained some of his work nicely on the 6guts blog.

In 2011 we will likely see a port of the meta object implementation to
parrot, and the beginnings of a Rakudo port to the CLR and JVM.


Niecza

In June, Stefan O'Rear started taking notes on how to compile Perl 6 to
the Common Language Runtime (CLR). In November he announced the Niecza
Perl 6 compiler, focused on the generation of efficient code.

It already has an impressive list of features, including proper Longest
Token Matching, a feature of regexes and grammars that no other Perl 6
compiler has implemented so far.


Summary
-------

2010 was a very rewarding year for the Perl 6 community. With Rakudo
there was a compiler available, with which small and medium scale
projects can be fun to write. Niecza is quickly catching up.

People experiment with Perl 6, join the community and bring fresh ideas.
There is still a long road ahead of us, but the author feels that this
road is getting broader and more accessible with each step.</description>
      <title>Perl 6 in 2010</title>
      <content:encoded>

&lt;p&gt;2010 has been a busy year for the Perl 6 developers, and came with a
noticeable distribution release, many new modules and much fun for the people
involved. Here's a short, subjective reflection of this year's Perl 6 events.&lt;/p&gt;

&lt;h2&gt;Specification&lt;/h2&gt;

&lt;p&gt;While some specification changes had substantial impact on the compiler
writers (and were usually in turn triggered by their worries), the user mostly
saw maturing of experimental features, smoothed APIs and some few new
features.&lt;/p&gt;

&lt;h3&gt;Lists, lists, lists&lt;/h3&gt;

&lt;p&gt;Just as last year, there were a lot of discussions on how lists and related
types worked. Much of it was driven by the efforts to implement proper lazy
lists in &lt;a href="http://rakudo.org/"&gt;Rakudo&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The result is a much more solid list model, which uses immutable iterators
under the hood - a fact that is hidden quite well from the user.&lt;/p&gt;

&lt;p&gt;The sequence operator (previously known as "series operator") is a powerful
tool for creating lazy lists. It has been extensively refactored to solve
problems both with its implementation and usage. It now takes an optional
closure left of the &lt;code&gt;...&lt;/code&gt; operator, and a limit that terminates the
sequence if it matches true:&lt;/p&gt;

&lt;pre&gt;
&lt;span class="synComment"&gt;# Lazy list of Fibonacci numbers up to (but excluding) 100:&lt;/span&gt;
&lt;span class="synSpecial"&gt;my&lt;/span&gt; &lt;span class="synIdentifier"&gt;@fib&lt;/span&gt; &lt;span class="synStatement"&gt;:=&lt;/span&gt; &lt;span class="synConstant"&gt;1&lt;/span&gt;&lt;span class="synStatement"&gt;,&lt;/span&gt; &lt;span class="synConstant"&gt;2&lt;/span&gt;&lt;span class="synStatement"&gt;,&lt;/span&gt; &lt;span class="synStatement"&gt;*+*&lt;/span&gt; &lt;span class="synStatement"&gt;...^&lt;/span&gt; &lt;span class="synStatement"&gt;*&lt;/span&gt; &lt;span class="synStatement"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="synConstant"&gt;100&lt;/span&gt;&lt;span class="synStatement"&gt;;&lt;/span&gt;
&lt;/pre&gt;

&lt;h3&gt;Date and Time&lt;/h3&gt;

&lt;p&gt;After several iterations, excessive bikeshedding
and serious hacking, Perl 6 now has built-in classes for handling times and
dates. They are inspired by the &lt;a href="http://search.cpan.org/perldoc?DateTime"&gt;DateTime&lt;/a&gt; and &lt;a href="http://search.cpan.org/perldoc?Date::Simple"&gt;Date::Simple&lt;/a&gt; Perl 5
modules. The biggest difference is probably that DateTime objects are
immutable in Perl 6.&lt;/p&gt;

&lt;p&gt;This part of the specification is implemented completely in Rakudo.&lt;/p&gt;


&lt;h3&gt;Zip meta operator&lt;/h3&gt;

&lt;p&gt;The &lt;code&gt;Z&lt;/code&gt; zip operator can now also act as a meta operator. Thus
an easy way to add two lists pairwise and lazily is now&lt;/p&gt;

&lt;pre&gt;
&lt;span class="synSpecial"&gt;my&lt;/span&gt; &lt;span class="synIdentifier"&gt;@sum&lt;/span&gt; &lt;span class="synStatement"&gt;=&lt;/span&gt; &lt;span class="synIdentifier"&gt;@list1&lt;/span&gt; &lt;span class="synStatement"&gt;Z+&lt;/span&gt; &lt;span class="synIdentifier"&gt;@list2&lt;/span&gt;&lt;span class="synStatement"&gt;;&lt;/span&gt;
&lt;/pre&gt;


&lt;h3&gt;Other changes&lt;/h3&gt;

&lt;ul&gt;
    &lt;li&gt;The &lt;code&gt;.pick&lt;/code&gt; method, which randomly takes one or more
    elements from lists and hashes, has been split up into two:
    &lt;code&gt;@a.pick(3)&lt;/code&gt; returns 3 distinct, random items from array
    &lt;code&gt;@a&lt;/code&gt;, while &lt;code&gt;@a.roll(3)&lt;/code&gt; does three independent
    random choices, resulting in possible duplicates in the result list.&lt;/li&gt;
    &lt;li&gt;The scoping of lexical multi routines and their protos has been
    clarified and overhauled (see &lt;a href="http://6guts.wordpress.com/2010/10/17/wrestling-with-dispatch/"&gt;this
    discussion of what was wrong previously&lt;/a&gt;, and &lt;a href="https://github.com/perl6/specs/commit/60aef3acd56f47b5a78721ca886b9fd3e22b366e"&gt;the
    resolution&lt;/a&gt;).&lt;/li&gt;
    &lt;li&gt;The numeric roles, buffers and &lt;code&gt;Whatever&lt;/code&gt; type have
    received significant updates&lt;/li&gt;
&lt;/ul&gt;


&lt;h2 id="community"&gt;Community&lt;/h2&gt;

&lt;p&gt;In 2010 we had a remarkable influx of friendly, interested, skilled and
enthused newcomers to the Perl 6 community. This is the result of increased
marketing outside the Perl community, well publicized releases, great
technology and a friendly community.&lt;/p&gt;

&lt;h3&gt;Community expansion&lt;/h3&gt;

&lt;p&gt;Two challenges or contests have been announced this year.&lt;/p&gt;

&lt;p&gt;Moritz Lenz
published a series of &lt;a href="http://perlgeek.de/blog-en/perl-6/contribute-now-announce.html"&gt;"weekly"
challenges&lt;/a&gt;, guided tasks to implement something
that the Perl 6 community needs: A website for the ecosystem, a feature in a
compiler and other small things that could be tackled without much prior
knowledge.&lt;/p&gt;

&lt;p&gt;The overall response was very good, and several people used it as a quick
start into the Perl 6 community, and stayed.&lt;/p&gt;

&lt;p&gt;Towards the end of the year, Carl Mäsak announced &lt;a href="http://strangelyconsistent.org/blog/masaks-perl-6-coding-contest"&gt;his
    Perl 6 coding contest&lt;/a&gt;. The submitter with the best solutions to five well
known programming tasks is to win 100€ worth of books.&lt;/p&gt;

&lt;p&gt;Another far-reaching project was the &lt;a href="http://perl6advent.wordpress.com/2010/12/25/merry-christmas-2/"&gt;Perl 6 advent calendar for 2010&lt;/a&gt;,
which attracted more than forty thousand visitors .&lt;/p&gt;

&lt;p&gt;In an attempt to make Perl 6 compilers easier available to the masses, John
Harrison &lt;a href="http://greaterthaninfinity.com/2010/09/try-rakudo-in-your-browser/"&gt;implemented
a web frontend to the Rakudo REPL&lt;/a&gt; and made it available at &lt;a href="http://try.rakudo.org/"&gt;try.rakudo.org&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;Conferences&lt;/h3&gt;

&lt;p&gt;There was a big &lt;a href="http://perlgeek.de/blog-en/perl-6/notes-from-yapc-hackathon.html"&gt;Perl 6
hackathon&lt;/a&gt; (though we had more discussions than hacking) at &lt;a href="http://conferences.yapceurope.org/ye2010/index.html"&gt;YAPC::EU 2010 in
Pisa&lt;/a&gt;. Many Perl 6 contributors, compiler writers and users met and
discussed pressing topics in the realms of specification, implementation
roadmap, measuring progress and community management. See the &lt;a href="http://perlgeek.de/blog-en/perl-6/notes-from-yapc-hackathon.html"&gt;meeting
notes&lt;/a&gt; for details.&lt;/p&gt;

&lt;p&gt;Of course there were also some Perl 6 talks at YAPC::EU, many of which
seemed well received by the audience.&lt;/p&gt;

&lt;p&gt;Perl 6 talks were also held at the Netherlands Perl Workshop, YAPC::Russia,
Norwegian Unix User Group and OSDC France, as well as many other conferences
which the author forgot :-).&lt;/p&gt;



&lt;h3&gt;Repository changes&lt;/h3&gt;

&lt;p&gt;Due to neglected maintenance, the Pugs repository had to be shut down. It
has been migrated to git, and split up into several repositories under the
&lt;a href="http://github.com/perl6/"&gt;perl6 organization on github&lt;/a&gt;. Notable
parts include:&lt;/p&gt;

&lt;dl&gt;
    &lt;dt&gt;roast&lt;/dt&gt;
    &lt;dd&gt;the Perl 6 test suite&lt;/dd&gt;

    &lt;dt&gt;specs&lt;/dt&gt;
    &lt;dd&gt;the specification&lt;/dd&gt;

    &lt;dt&gt;perl6.org&lt;/dt&gt;
    &lt;dd&gt;the &lt;a href="http://perl6.org/"&gt;main Perl 6 website&lt;/a&gt;&lt;/dd&gt;

    &lt;dt&gt;modules.perl6.org&lt;/dt&gt;
    &lt;dd&gt;the &lt;a href="http://modules.perl6.org/"&gt;Perl 6  modules website&lt;/a&gt;&lt;/dd&gt;

    &lt;dt&gt;ecosystem&lt;/dt&gt;
    &lt;dd&gt;the module list repository&lt;/dd&gt;

    &lt;dt&gt;mu&lt;/dt&gt;
    &lt;dd&gt;the remnants of the old pugs repository&lt;/dd&gt;
&lt;/dl&gt;

&lt;p&gt;While the transition was mostly ad-hoc and not really planned for, most of
the resulting confusion could be resolved fairly quickly.&lt;/p&gt;


&lt;h2 id="eco"&gt;Module ecosystem&lt;/h2&gt;

&lt;p&gt;While we still lack a proper module distribution system, &lt;a href="http://modules.perl6.org/"&gt;we now have a website of known Perl 6
modules&lt;/a&gt; and a &lt;a href="http://github.com/tadzik/neutro/"&gt;module
installer&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;But most importantly the number of modules and module authors is steadily
increasing (82 known Perl 6 modules at the time of writing, compared to 45 last
year). While we still lack the wealth of the Perl 5 ecosystem, there are now
&lt;a href="http://github.com/mberends/MiniDBI/"&gt;database&lt;/a&gt; modules, HTTP &lt;a href="http://github.com/cosimo/perl6-lwp-simple/"&gt;client&lt;/a&gt; and &lt;a href="http://github.com/mberends/http-server-simple/"&gt;server&lt;/a&gt; modules, &lt;a href="http://github.com/moritz/json/"&gt;serialization&lt;/a&gt;, &lt;a href="http://github.com/tadzik/perl6-File-Tools/"&gt;file handling tools&lt;/a&gt; and so on.&lt;/p&gt;

&lt;h2&gt;Implementations&lt;/h2&gt;

&lt;h3&gt;Rakudo&lt;/h3&gt;

&lt;p&gt;Most importantly, this year saw the first &lt;a href="http://rakudo.org/announce/rakudo-star/2010.07"&gt;Rakudo Star&lt;/a&gt; release. Rakudo star is a distribution of the Rakudo
compiler, modules and documentation. While it is still a kind of preview
release, some few &lt;a href="http://strangelyconsistent.org/about"&gt;production&lt;/a&gt; &lt;a href="http://perlgeek.de/blog-en/perl-6/pvc-perl6-vocabulary-coach.html"&gt;usages&lt;/a&gt; of the Rakudo Perl 6 compiler and distribution have been spotted in the wake of
this release.&lt;/p&gt;

&lt;p&gt;Also a good part of the Rakudo code based has been replaced during a major
refactor, which bases Rakudo on top of a &lt;a href="https://github.com/perl6/nqp-rx"&gt;new grammar engine&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Major improvements to the compiler include&lt;/p&gt;

&lt;ul&gt;
    &lt;li&gt;an implementation of lazy lists&lt;/li&gt;
    &lt;li&gt;lexical classes and roles&lt;/li&gt;
    &lt;li&gt;Perl 6 level stack traces&lt;/li&gt;
    &lt;li&gt;much more solid meta object model, which allows the user to create and
        modify classes programmatically at run time&lt;/li&gt;
        &lt;li&gt;implementation of the &lt;code&gt;s/search/replace/&lt;/code&gt; and
        &lt;code&gt;s[search] = replace()&lt;/code&gt; syntactic features, along with
        several new regex adverbs and variable interpolation into regexes&lt;/li&gt;
    &lt;li&gt;improved interpolation in double-quoted strings: array and hash
    variables now properly interpolate when the expression ends in a
    bracketing construct&lt;/li&gt;
    &lt;li&gt;an improved read-evaluation-print loop, which now remembers variables
    from previous lines, and also automatically prints the result if no output
    was produced&lt;/li&gt;
    &lt;li&gt;multi level array and hash autovivification&lt;/li&gt;
    &lt;li&gt;binding and read-only binding of variables&lt;/li&gt;
    &lt;li&gt;a solid implementation of the DateTime and Date classes&lt;/li&gt;
    &lt;li&gt;&lt;a href="http://perlgeek.de/blog-en/perl-5-to-6/14-main-sub.txt"&gt;MAIN
        and USAGE&lt;/a&gt; subroutines&lt;/li&gt; &lt;li&gt;the magic &lt;code&gt;$*ARGFILES&lt;/code&gt;
    file handle and &lt;code&gt;get&lt;/code&gt; (comparable to &lt;code&gt;while (&amp;lt;&amp;gt;) { ...
        }&lt;/code&gt; in Perl 5)&lt;/li&gt;
    &lt;li&gt;an implementation of basic feed operators&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;During YAPC::EU the Rakudo contributors decided to target multiple virtual
machines: besides the current parrot backend we want to support at least the
CLR (.NET).&lt;/p&gt;

&lt;p&gt;With this goal in mind, and the need for major performance improvements,
Jonathan Worthington prototyped a &lt;a href="http://github.com/jnthn/6model"&gt;new, efficient meta object model&lt;/a&gt;
for parrot in C#, and used that as a base for the new CLR backend. He got help
from Matthew Wilson, and Martin Berends started porting the effort to the
JVM. Jonathan &lt;a href="http://6guts.wordpress.com/"&gt;explained some of his work
nicely on the 6guts blog&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;In 2011 we will likely see a port of the meta object implementation to
parrot, and the beginnings of a Rakudo port to the CLR and JVM.&lt;/p&gt;

&lt;h3&gt;Niecza&lt;/h3&gt;

&lt;p&gt;In June, Stefan O'Rear started taking notes on how to compile Perl 6 to the
Common Language Runtime (CLR). In November he &lt;a href="http://www.nntp.perl.org/group/perl.perl6.announce/2010/11/msg641.html"&gt;announced
the Niecza Perl 6 compiler&lt;/a&gt;, focused on the generation of efficient
code.&lt;/p&gt;

&lt;p&gt;It already has an impressive list of features, including
proper Longest Token Matching, a feature of regexes and grammars that no other
Perl 6 compiler has implemented so far.&lt;/p&gt;

&lt;h2&gt;Summary&lt;/h2&gt;

&lt;p&gt;2010 was a very &lt;a href="http://strangelyconsistent.org/blog/happy-10th-anniversary-perl-6"&gt;rewarding&lt;/a&gt; year for the Perl 6 community. With Rakudo there
was a compiler available, with which small and medium scale projects can be
fun to write. Niecza is quickly catching up.&lt;/p&gt;

&lt;p&gt;People experiment with Perl 6, join the community and bring fresh ideas.
There is still a long road ahead of us, but the author feels that this road is
getting broader and more accessible with each step.&lt;/p&gt;


 
</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/perl-6-in-2010.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/an-offer-to-the-perl-community.html</link>
      <description>The Perl 6 developers communicate a lot through IRC. Some of the
conversation is still valuable later on, so we have public IRC logs.

The software powering these logs was written especially for #perl6, but
works fine for other channels too. Among the other users are TestML, CDK
(Chemistry Development Kit), darcs, mojo, Padre, the Perl IDE, Parrot and
Rosetta Code.

If you are also developing software, and would like public logs for your
channel (either on freenode or irc.perl.org; other servers might be added
on demand), feel free to contact me (moritz on freenode, or per email:
moritz at faui2k3.org)

Features include: linking to individual lines, permanent URLs and
volatile URLs for the current day, automatic linking of URLs and readable
color schemes.

A current limitation is that you can't have two channels with the same
name from different networks, in case of conflict "first come, first
served" holds.</description>
      <title>An offer for software developers: free IRC logging</title>
      <content:encoded>

&lt;p&gt;The &lt;a href="http://perl6.org/"&gt;Perl 6 developers&lt;/a&gt; communicate a lot
through &lt;abbr title="Internet Relay Chat"&gt;IRC&lt;/abbr&gt;. Some of the conversation
is still valuable later on, so we have &lt;a href="http://irclog.perlgeek.de/perl6/today"&gt;public IRC logs&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;The &lt;a href="http://moritz.faui2k3.org/en/ilbot"&gt;software powering these
logs&lt;/a&gt; was written especially for #perl6, but works fine for other channels
too. Among the other users are &lt;a href="http://www.testml.org/"&gt;TestML&lt;/a&gt;,
&lt;a href="http://sourceforge.net/apps/mediawiki/cdk/index.php?title=Main_Page"&gt;CDK
(Chemistry Development Kit)&lt;/a&gt;, &lt;a href="http://darcs.net/"&gt;darcs&lt;/a&gt;,
&lt;a href="http://mojolicio.us/"&gt;mojo&lt;/a&gt;, &lt;a href="http://padre.perlide.org/"&gt;Padre, the Perl IDE&lt;/a&gt;, &lt;a href="http://www.parrot.org/"&gt;Parrot&lt;/a&gt; and &lt;a href="http://rosettacode.org/wiki/Welcome_to_Rosetta_Code"&gt;Rosetta
Code&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;If you are also developing software, and would like public logs for your
channel (either on freenode or irc.perl.org; other servers might be added on
demand), feel free to contact me (&lt;code&gt;moritz&lt;/code&gt; on freenode, or per
email: moritz at faui2k3.org)&lt;/p&gt;

&lt;p&gt;Features include: linking to individual lines, permanent URLs and volatile
URLs for the current day, automatic linking of URLs and readable color
schemes.&lt;/p&gt;

&lt;p&gt;A current limitation is that you can't have two channels with the same name
from different networks, in case of conflict "first come, first served"
holds.&lt;/p&gt;


</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/an-offer-to-the-perl-community.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/grant-report-errors-1.html</link>
      <description>My Hague Grant proposal for designing, implementing and testing
structured error messages for Perl 6 has been acceepted, and I've started
my work on it in my copious free time.

Before the grant started I've unified the error messages of several
compilers to use "Cannot" instead of a wild mixture of "Cannot", "Can
not" and "Can't".

In the past week I created a repository for the initial work on the error
message spec, and added a list of existing error messages across
different compilers, and some notes regarding the upcoming spec.

So far I've outlined some thoughts about separation of concerns,
classification of the error messages, testing error messages for certain
properties, and calling syntax for die() and fail().

Any constructive feedback on it is very welcome.

Thanks go to Ian Hague and The Perl Foundation for supporting my work
financially.</description>
      <title>First Grant Report: Structured Error Messages</title>
      <content:encoded>
&lt;p&gt;My &lt;a href="http://news.perlfoundation.org/2011/02/hague-grant-application-struct.html"&gt;Hague
    Grant proposal&lt;/a&gt; for designing, implementing and testing structured
error messages for Perl 6 &lt;a href="http://news.perlfoundation.org/2011/04/structured-error-message-grant.html"&gt;has
been acceepted&lt;/a&gt;, and I've started my work on it in &lt;a href="http://www.catb.org/jargon/html/C/copious-free-time.html"&gt;my copious
free time&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Before the grant started I've &lt;a href="https://github.com/perl6/std/commit/430e3d68b0321e96b5ae1586329b0caa74dc8ca8"&gt;unified&lt;/a&gt;
&lt;a href="https://github.com/rakudo/rakudo/commit/76425aba89d4fbd742abbf0d1278380ec21f9ce5"&gt;the
error messages&lt;/a&gt; of &lt;a href="https://github.com/sorear/niecza/commit/d6ca04a1aaee2f180454f77f14af4b647c65b1ff"&gt;several&lt;/a&gt;
&lt;a href="https://github.com/masak/yapsi/commit/423894a104f4b10a2122ba7dc2e3160b0481654c"&gt;compilers&lt;/a&gt;
to use "Cannot" instead of a wild mixture of "Cannot", "Can not" and
"Can't".&lt;/p&gt;

&lt;p&gt;In the past week I created a &lt;a href="https://github.com/perl6/errors/"&gt;repository for the initial work on the
error message spec&lt;/a&gt;, and added a list of existing error messages across
different compilers, and some notes regarding the upcoming spec.&lt;/p&gt;

&lt;p&gt;So far I've outlined some thoughts about separation of concerns,
classification of the error messages, testing error messages for certain
properties, and calling syntax for &lt;code&gt;die()&lt;/code&gt; and
&lt;code&gt;fail()&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Any constructive feedback on it is very welcome.&lt;/p&gt;

&lt;p&gt;Thanks go to Ian Hague and The Perl Foundation for supporting my work
financially.&lt;/p&gt;


</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/grant-report-errors-1.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/notes-2011-02.html</link>
      <description>Lately real life has prevented me from blogging, so here are just a few
random notes from the Perl 6 developers:

The Perl bug tracker now has tags testneeded and testcommitted, which can
mark tests that need or have tests in the spectest suite. Since the URLs
for querying these tags are unwieldy and non-obvious, I've created some
aliases: http://rakudo.de/testneeded and http://rakudo.de/testcommitted.

Development of the new nqp and rakudo-on-the-new-object-model is
progressing nicely. I had some fun porting some PIR code to NQP, and
writing some new code. Most interesting to read is the source of the new
meta model, much of which is written in a subset of Perl 6 (so quite
readable, if you happen to know Perl 6. For example you can see how the
method resolution order for multiple inheritance is calculated.

There is a parrot branch that adds a generation garbage collector to
parrot. Its release is planned for shortly after the 3.1.0 release due
tomorrow. Initial benchmarks show that Rakudo is between 25% and 30%
faster on that parrot, as measured by a spectest run. I very much look
forward to having that in the parrot main line.

Writing code for niecza is quite a nice experience. It still has a big
startup cost, but then runs much faster than rakudo (at least it feels
that way). There are still lots of features missing (for example
non-integer number literals), but feature requests are usually implement
quite quickly.</description>
      <title>Perl 6 notes from February 2011</title>
      <content:encoded>
&lt;p&gt;Lately real life has prevented me from blogging, so here are just a few
random notes from the Perl 6 developers:&lt;/p&gt;


&lt;p&gt;The &lt;a href="http://rt.perl.org/rt3/"&gt;Perl bug tracker&lt;/a&gt; now has tags
&lt;code&gt;testneeded&lt;/code&gt; and &lt;code&gt;testcommitted&lt;/code&gt;, which can mark tests
that need or have tests in the spectest suite. Since the URLs for querying
these tags are unwieldy and non-obvious, I've created some aliases:
&lt;a href="http://rakudo.de/testneeded"&gt;http://rakudo.de/testneeded&lt;/a&gt;
and
&lt;a href="http://rakudo.de/testcommitted"&gt;http://rakudo.de/testcommitted&lt;/a&gt;.
&lt;/p&gt;

&lt;p&gt;Development of &lt;a href="http://pmthium.com/2011/02/08/new-nqp-repository-new-nom-rakudo-branch/"&gt;the
new nqp and rakudo-on-the-new-object-model&lt;/a&gt; is progressing nicely. I had
some fun porting some PIR code to NQP, and writing some new code. Most
interesting to read is the &lt;a href="https://github.com/rakudo/rakudo/tree/nom/src/Perl6/Metamodel"&gt;source of the
new meta model&lt;/a&gt;, much of which is written in a subset of Perl 6 (so quite
readable, if you happen to know Perl 6. For example you can see how &lt;a href="https://github.com/rakudo/rakudo/blob/nom/src/Perl6/Metamodel/MultipleInheritance.pm"&gt;the
    method resolution order for multiple inheritance is calculated.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;There is a parrot branch that adds a generation garbage collector to
parrot. Its release is planned for shortly after the 3.1.0 release due
tomorrow. Initial benchmarks show that Rakudo is between 25% and 30% faster on
that parrot, as measured by a spectest run. I very much look forward to having
that in the parrot main line.&lt;/p&gt;

&lt;p&gt;Writing code for &lt;a href="https://github.com/sorear/niecza"&gt;niecza&lt;/a&gt;
is quite a nice experience. It still has a big startup cost, but then runs
much faster than rakudo (at least it feels that way). There are still lots of
features missing (for example non-integer number literals), but feature
requests are usually implement quite quickly.&lt;/p&gt;

 
</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/notes-2011-02.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/pvc-perl6-vocabulary-coach.html</link>
      <description>Hej!

I'm trying to learn Norwegian these days, which is eating many of my
round tuits that were previously available for Perl 6 hacking.

On the other hand I'm using Perl 6 to help me learning; I've written PVC,
the Perl 6 Vocabulary Coach. It uses a word list, and keeps track of how
many times in a row I entered the Norwegian translation of a word
correctly.

The better I know a word, the less frequently I'm being asked for it. Not
quite the same as spaced repetition learning, but still it feels quite
well.</description>
      <title>PVC - Perl 6 Vocabulary Coach</title>
      <content:encoded>

&lt;p&gt;Hej!&lt;/p&gt;

&lt;p&gt;I'm trying to learn Norwegian these days, which is eating many of my &lt;a href="http://en.wiktionary.org/wiki/round_tuit"&gt;round tuits&lt;/a&gt; that were
previously available for Perl 6 hacking.&lt;/p&gt;

&lt;p&gt;On the other hand I'm using Perl 6 to help me learning; I've written &lt;a href="https://github.com/moritz/perl6-vocabular-coach"&gt;PVC, the Perl 6
Vocabulary Coach&lt;/a&gt;. It uses a word list, and keeps track of how many times
in a row I entered the Norwegian translation of a word correctly.&lt;/p&gt;

&lt;p&gt;The better I know a word, the less frequently I'm being asked for it. Not
quite the same as &lt;a href="http://psycnet.apa.org/journals/edu/55/5/297/"&gt;spaced repetition
learning&lt;/a&gt;, but still it feels quite well.&lt;/p&gt;


</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/pvc-perl6-vocabulary-coach.html</guid>
    </item>
    <item>
      <author>nobody@example.com (Moritz Lenz)</author>
      <dc:creator>nobody@example.com (Moritz Lenz)</dc:creator>
      <link>http://perlgeek.de/blog-en/perl-6/real-world-strikes-back.html</link>
      <description>tl;dr;; version: arbitrary API limitations do more harm than good, even
if meant well in the first place.

Most advanced libraries that help you with date calculations have
separate data types for a point in time, and a time span. That's because
those two concepts actually have different semantics. It doesn't make
sense to add two points in time, but it does make sense to add two
durations, or add a duration to a point in time.

In Perl 6, those two types are called Instant and Duration. And obviously
it makes sense to multiply a Duration with a number, but it doesn't make
sense to multiply two Durations, or take a power of a Duration. Right?

That's the opinion that both the Perl 6 specification and the
implementation in Rakudo reflected. Until recently, when somebody started
to actually use it.

That's when the real world struck back. Carl Mäsak did some timings, and
then calculated averages and standard deviations. And for calculating
standard deviations, you actually have to square those durations, add
them up, and then calculate the square root.

So this perfectly legitimate use case shows that multiplication (and also
exponentiation) are perfectly fine operations on Durations. Likewise the
current specification disallows division of two Durations. Why? It's
perfectly fine to ask for the ratio of two time spans. How much longer
(or shorter) are my meetings with my current boss, compared to those with
my previous boss? That's the question that Duration / Duration answers.

So, the real world taught me that putting restrictions on the allowed
operations is a bad idea. It was meant well, it was supposed to catch
operations that don't made sense to the designer, and presumably would
catch some error that a confused beginner might make. But in the end it
did more harm than good.

Currently the Duration class stores a number, and re-dispatches all
operations to that number, forbidding some of them. Having learned my
lesson, I suggest we get rid of it, and have Instant - Instant return
that number straight away. If some day we want to add functionality to
Duration, we can still create that class as a subclass of the number.</description>
      <title>The Real World Strikes Back - or why you shouldn't forbid stuff just because you think it's wrong</title>
      <content:encoded>
&lt;p&gt;&lt;a href="http://www.urbandictionary.com/define.php?term=tl%3Bdr"&gt;tl;dr;;
version&lt;/a&gt;: arbitrary API limitations do more harm than good, even if
meant well in the first place.&lt;/p&gt;

&lt;p&gt;Most advanced libraries that help you with date calculations have separate
data types for a point in time, and a time span. That's because those two
concepts actually have different semantics. It doesn't make sense to add two
points in time, but it does make sense to add two durations, or add a duration
to a point in time.&lt;/p&gt;

&lt;p&gt;In &lt;a href="http://perl6.org/"&gt;Perl 6&lt;/a&gt;, those two types are called
&lt;code&gt;Instant&lt;/code&gt; and
&lt;code&gt;Duration&lt;/code&gt;. And obviously it makes sense to multiply a Duration
with a number, but it doesn't make sense to multiply two Durations, or take a
power of a Duration. Right?&lt;/p&gt;

&lt;p&gt;That's the opinion that both the &lt;a href="http://perlcabal.org/syn/"&gt;Perl 6
specification&lt;/a&gt; and the
implementation in &lt;a href="http://rakudo.org/"&gt;Rakudo&lt;/a&gt; reflected. Until
recently, when &lt;a href="http://strangelyconsistent.org/"&gt;somebody&lt;/a&gt; started
to actually use it.&lt;/p&gt;

&lt;p&gt;That's when the real world struck back. Carl Mäsak did some timings, and
then calculated averages and standard deviations. And for calculating standard
deviations, you actually have to square those durations, add them up, and
then calculate the square root.&lt;/p&gt;

&lt;p&gt;So this perfectly legitimate use case shows that multiplication (and also
exponentiation) are perfectly fine operations on Durations. Likewise the
current specification disallows division of two Durations. Why? It's perfectly
fine to ask for the ratio of two time spans. How much longer (or shorter) are
my meetings with my current boss, compared to those with my previous boss?
That's the question that &lt;code&gt;Duration / Duration&lt;/code&gt; answers.&lt;/p&gt;

&lt;p&gt;So, the real world taught me that putting restrictions on the allowed
operations is a bad idea. It was meant well, it was supposed to catch
operations that don't made sense to the designer, and presumably would catch
some error that a confused beginner might make. But in the end it did more
harm than good.&lt;/p&gt;

&lt;p&gt;Currently the &lt;code&gt;Duration&lt;/code&gt; class stores a number, and
re-dispatches all operations to that number, forbidding some of them. Having
learned my lesson, I suggest we get rid of it, and have &lt;code&gt;Instant -
Instant&lt;/code&gt; return that number straight away. If some day we want to
add functionality to &lt;code&gt;Duration&lt;/code&gt;, we can still create that class as
a subclass of the number.&lt;/p&gt;


</content:encoded>
      <guid isPermaLink="false">tag:insel,2006:tag:perlsphere.net,2006:http://perlgeek.de/blog-en/perl-6/real-world-strikes-back.html</guid>
    </item>
  </channel>
</rss>

