<?xml version="1.0" encoding="windows-1252"?>
<node id="766987" title="Re^4: Named Subroutine Parameters: Compile-time errors vs. Run-time warnings" created="2009-05-29 19:47:04" updated="2009-05-29 19:47:04">
<type id="11">
note</type>
<author id="107600">
TheDamian</author>
<data>
<field name="doctext">
&lt;blockquote&gt;&lt;i&gt;
...one of the MTOW you promote TDI is, if not wrong, then sub-optimal
&lt;/i&gt;&lt;/blockquote&gt;

&lt;p&gt;One of the points I make in PBP is that "sub-optimal" is not a easy thing to judge as soon as you have more than one metric to optimize. PBP suggests at least four: maintainability, robustness, performance, and conciseness (and argues that that is the approximate order of importance of the four). 

&lt;p&gt;The recommendation to use anonymous hashes when passing one-off argument lists trades a little less performance for a little more conciseness, some improved robustness, and (if used consistently throughout the code) better maintainability.

&lt;p&gt;Of course, you're perfectly correct to factor out the hash memory reallocations into a single declaration if you're going to repeat the same call hundreds (or millions) of times, but as a default habit, just building an anonymous hashref at the point you need it is cleaner, less error prone, and more concise. And the performance cost on a single call at modern processor speeds isn't worth the hassle of coordinating between separate hash declarations and uses. 

&lt;p&gt;All of which is why inlined hashes were the default recommendation in PBP.

&lt;p&gt;PS: You also asked what worse mistakes I made in PBP. One of them was not finding a way to adequately get across that the advice in the book is meant to be a starting point, a default zero-state, an initiator of conscious thought, rather than an end-point of discussion. Gods know, I &lt;i&gt;tried&lt;/i&gt; to convey that (devoting most of the first chapter to the idea), but I stupidly didn't put any code in that chapter, so most readers just seem to skip straight over it. :-(
</field>
<field name="root_node">
766188</field>
<field name="parent_node">
766912</field>
</data>
</node>
