{"id":76,"date":"2008-08-20T17:42:23","date_gmt":"2008-08-21T00:42:23","guid":{"rendered":"http:\/\/codefork.com\/blog\/?p=76"},"modified":"2008-08-20T17:42:23","modified_gmt":"2008-08-21T00:42:23","slug":"perl-makes-you-cry-harder","status":"publish","type":"post","link":"https:\/\/codefork.com\/blog\/index.php\/2008\/08\/20\/perl-makes-you-cry-harder\/","title":{"rendered":"Perl Makes You Cry Harder"},"content":{"rendered":"<p>Slashdot is <a href=\"http:\/\/developers.slashdot.org\/developers\/08\/08\/19\/2335246.shtml\">linking<\/a> to an ONLamp.com article, <a href=\"http:\/\/www.oreillynet.com\/onlamp\/blog\/2008\/08\/why_corporates_hate_perl.html\">Why Corporates Hate Perl<\/a>. I think it&#8217;s interesting that while zealots exist for every language, you rarely encounter the kind of vehement hatred for a language the way you do for perl. Which probably just fuels the antagonism in both directions.<\/p>\n<p>Many Slashdot comments point out that the requirements specific to corporate environments are rather idiosyncratic. Some stress the &#8220;right tool for the job&#8221; philosophy, which I totally agree with.<br \/>\nAnd <a href=\"http:\/\/developers.slashdot.org\/comments.pl?sid=650931&#038;cid=24670011\">here&#8217;s one<\/a> that makes a wonderful characterization about what perl is and is not:<\/p>\n<blockquote><p>The problem is, Perl is just a programming language, not a conceptual system. Arguably it is the antithesis of a conceptual system. Many teams then create their own application frameworks atop it (e.g. Mason, POE), and it&#8217;s rare for these frameworks to be compatible since Perl offers so many variations in the construction of even standard programming artifacts like classes &#038; objects.<\/p>\n<p>In addition, the level of expression (i.e. TMTOWTDI) means in practice that highly varying programming styles occur throughout large, long-lived bodies of code.<\/p>\n<p>As a result, significant Perl-based business applications tend to become hard-to-maintain hairballs of divergent style and subtly variegated concept.<\/p>\n<p>The root cause: as I started with; the absence of a standard conceptual framework for Perl means that during the early phases of a project, it&#8217;s much harder to reason meaningfully about the eventual form of the system than it is with, say, Java or .NET where many of the design patterns are explicitly standardised.<\/p>\n<p>I wouldn&#8217;t say that &#8220;Corporates Hate Perl&#8221;. It&#8217;s just the Perl as an application language doesn&#8217;t suit the formal design &#038; architecture process we&#8217;re seeing increasingly as IT departments start to grow up and realise that they&#8217;re not the most important people in the company.<\/p>\n<p>That doesn&#8217;t disqualify Perl from being a useful tool, and it&#8217;ll always have a place in data transformation, but it does mean that Perl isn&#8217;t going to be one of the general-purpose application programming languages of the future.<\/p><\/blockquote>\n<p>Bravo. I&#8217;d add that what the author identifies as a &#8220;problem&#8221; is also Perl&#8217;s strength. There&#8217;s more than one way to do it, so do it as you please. That definitely has allure for many programmers. As a project scales up, though, I think this does in fact become a detriment, and not only for corporate projects.<\/p>\n<p>In response to someone who wrote, &#8220;chomp is not ambiguous. RTFM and stop crying,&#8221; here&#8217;s <a href=\"http:\/\/developers.slashdot.org\/comments.pl?sid=650931&#038;cid=24670377\">another awesome comment<\/a>:<\/p>\n<blockquote><p>http:\/\/perldoc.perl.org\/functions\/chomp.html [perl.org]<br \/>\nThis safer version of &#8220;chop&#8221; removes any trailing string that corresponds to the current value of $\/ (also known as $INPUT_RECORD_SEPARATOR in the English module). It returns the total number of characters removed from all its arguments. It&#8217;s often used to remove the newline from the end of an input record when you&#8217;re worried that the final record may be missing its newline. When in paragraph mode ($\/ = &#8220;&#8221; ), it removes all trailing newlines from the string. When in slurp mode ($\/ = undef ) or fixed-length record mode ($\/ is a reference to an integer or the like, see perlvar) chomp() won&#8217;t remove anything. If VARIABLE is omitted, it chomps $_ . Example:<\/p>\n<p>If anything I&#8217;m crying harder after reading that.<\/p><\/blockquote>\n<p>Amen, brother.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Slashdot is linking to an ONLamp.com article, Why Corporates Hate Perl. I think it&#8217;s interesting that while zealots exist for every language, you rarely encounter the kind of vehement hatred for a language the way you do for perl. Which probably just fuels the antagonism in both directions. Many Slashdot comments point out that the &hellip; <a href=\"https:\/\/codefork.com\/blog\/index.php\/2008\/08\/20\/perl-makes-you-cry-harder\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Perl Makes You Cry Harder&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-76","post","type-post","status-publish","format-standard","hentry","category-misc"],"_links":{"self":[{"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/76","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/comments?post=76"}],"version-history":[{"count":0,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/posts\/76\/revisions"}],"wp:attachment":[{"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/media?parent=76"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/categories?post=76"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/codefork.com\/blog\/index.php\/wp-json\/wp\/v2\/tags?post=76"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}