CINXE.COM

Turn off indirect object notation – The Effective Perler

<!DOCTYPE html> <html lang="en-US" class="no-js"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="profile" href="https://gmpg.org/xfn/11"> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript">(function(html){html.className = html.className.replace(/\bno-js\b/,'js')})(document.documentElement);</script> <title>Turn off indirect object notation &#8211; The Effective Perler</title> <meta name='robots' content='max-image-preview:large' /> <link rel='dns-prefetch' href='//fonts.googleapis.com' /> <link rel='dns-prefetch' href='//s.w.org' /> <link href='https://fonts.gstatic.com' crossorigin rel='preconnect' /> <link rel="alternate" type="application/rss+xml" title="The Effective Perler &raquo; Feed" href="https://www.effectiveperlprogramming.com/feed/" /> <link rel="alternate" type="application/rss+xml" title="The Effective Perler &raquo; Comments Feed" href="https://www.effectiveperlprogramming.com/comments/feed/" /> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript"> window._wpemojiSettings = {"baseUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/72x72\/","ext":".png","svgUrl":"https:\/\/s.w.org\/images\/core\/emoji\/13.1.0\/svg\/","svgExt":".svg","source":{"concatemoji":"https:\/\/www.effectiveperlprogramming.com\/wp-includes\/js\/wp-emoji-release.min.js?ver=5.9.3"}}; /*! This file is auto-generated */ !function(e,a,t){var n,r,o,i=a.createElement("canvas"),p=i.getContext&&i.getContext("2d");function s(e,t){var a=String.fromCharCode;p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,e),0,0);e=i.toDataURL();return p.clearRect(0,0,i.width,i.height),p.fillText(a.apply(this,t),0,0),e===i.toDataURL()}function c(e){var t=a.createElement("script");t.src=e,t.defer=t.type="text/javascript",a.getElementsByTagName("head")[0].appendChild(t)}for(o=Array("flag","emoji"),t.supports={everything:!0,everythingExceptFlag:!0},r=0;r<o.length;r++)t.supports[o[r]]=function(e){if(!p||!p.fillText)return!1;switch(p.textBaseline="top",p.font="600 32px Arial",e){case"flag":return s([127987,65039,8205,9895,65039],[127987,65039,8203,9895,65039])?!1:!s([55356,56826,55356,56819],[55356,56826,8203,55356,56819])&&!s([55356,57332,56128,56423,56128,56418,56128,56421,56128,56430,56128,56423,56128,56447],[55356,57332,8203,56128,56423,8203,56128,56418,8203,56128,56421,8203,56128,56430,8203,56128,56423,8203,56128,56447]);case"emoji":return!s([10084,65039,8205,55357,56613],[10084,65039,8203,55357,56613])}return!1}(o[r]),t.supports.everything=t.supports.everything&&t.supports[o[r]],"flag"!==o[r]&&(t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&t.supports[o[r]]);t.supports.everythingExceptFlag=t.supports.everythingExceptFlag&&!t.supports.flag,t.DOMReady=!1,t.readyCallback=function(){t.DOMReady=!0},t.supports.everything||(n=function(){t.readyCallback()},a.addEventListener?(a.addEventListener("DOMContentLoaded",n,!1),e.addEventListener("load",n,!1)):(e.attachEvent("onload",n),a.attachEvent("onreadystatechange",function(){"complete"===a.readyState&&t.readyCallback()})),(n=t.source||{}).concatemoji?c(n.concatemoji):n.wpemoji&&n.twemoji&&(c(n.twemoji),c(n.wpemoji)))}(window,document,window._wpemojiSettings); </script> <style> img.wp-smiley, img.emoji { display: inline !important; border: none !important; box-shadow: none !important; height: 1em !important; width: 1em !important; margin: 0 0.07em !important; vertical-align: -0.1em !important; background: none !important; padding: 0 !important; } </style> <link rel='stylesheet' id='wp-block-library-css' href='https://www.effectiveperlprogramming.com/wp-includes/css/dist/block-library/style.min.css?ver=5.9.3' media='all' /> <style id='wp-block-library-theme-inline-css'> .wp-block-audio figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-audio figcaption{color:hsla(0,0%,100%,.65)}.wp-block-code>code{font-family:Menlo,Consolas,monaco,monospace;color:#1e1e1e;padding:.8em 1em;border:1px solid #ddd;border-radius:4px}.wp-block-embed figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed figcaption{color:hsla(0,0%,100%,.65)}.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:hsla(0,0%,100%,.65)}.wp-block-image figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-image figcaption{color:hsla(0,0%,100%,.65)}.wp-block-pullquote{border-top:4px solid;border-bottom:4px solid;margin-bottom:1.75em;color:currentColor}.wp-block-pullquote__citation,.wp-block-pullquote cite,.wp-block-pullquote footer{color:currentColor;text-transform:uppercase;font-size:.8125em;font-style:normal}.wp-block-quote{border-left:.25em solid;margin:0 0 1.75em;padding-left:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;position:relative;font-style:normal}.wp-block-quote.has-text-align-right{border-left:none;border-right:.25em solid;padding-left:0;padding-right:1em}.wp-block-quote.has-text-align-center{border:none;padding-left:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote.is-style-plain{border:none}.wp-block-search .wp-block-search__label{font-weight:700}.wp-block-group:where(.has-background){padding:1.25em 2.375em}.wp-block-separator{border:none;border-bottom:2px solid;margin-left:auto;margin-right:auto;opacity:.4}.wp-block-separator:not(.is-style-wide):not(.is-style-dots){width:100px}.wp-block-separator.has-background:not(.is-style-dots){border-bottom:none;height:1px}.wp-block-separator.has-background:not(.is-style-wide):not(.is-style-dots){height:2px}.wp-block-table thead{border-bottom:3px solid}.wp-block-table tfoot{border-top:3px solid}.wp-block-table td,.wp-block-table th{padding:.5em;border:1px solid;word-break:normal}.wp-block-table figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-table figcaption{color:hsla(0,0%,100%,.65)}.wp-block-video figcaption{color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-video figcaption{color:hsla(0,0%,100%,.65)}.wp-block-template-part.has-background{padding:1.25em 2.375em;margin-top:0;margin-bottom:0} </style> <style id='global-styles-inline-css'> body{--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #fff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--dark-gray: #1a1a1a;--wp--preset--color--medium-gray: #686868;--wp--preset--color--light-gray: #e5e5e5;--wp--preset--color--blue-gray: #4d545c;--wp--preset--color--bright-blue: #007acc;--wp--preset--color--light-blue: #9adffd;--wp--preset--color--dark-brown: #402b30;--wp--preset--color--medium-brown: #774e24;--wp--preset--color--dark-red: #640c1f;--wp--preset--color--bright-red: #ff675f;--wp--preset--color--yellow: #ffef8e;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgba(6,147,227,1) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgba(252,185,0,1) 0%,rgba(255,105,0,1) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgba(255,105,0,1) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--duotone--dark-grayscale: url('#wp-duotone-dark-grayscale');--wp--preset--duotone--grayscale: url('#wp-duotone-grayscale');--wp--preset--duotone--purple-yellow: url('#wp-duotone-purple-yellow');--wp--preset--duotone--blue-red: url('#wp-duotone-blue-red');--wp--preset--duotone--midnight: url('#wp-duotone-midnight');--wp--preset--duotone--magenta-yellow: url('#wp-duotone-magenta-yellow');--wp--preset--duotone--purple-green: url('#wp-duotone-purple-green');--wp--preset--duotone--blue-orange: url('#wp-duotone-blue-orange');--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;} </style> <link rel='stylesheet' id='twentysixteen-fonts-css' href='https://fonts.googleapis.com/css?family=Merriweather%3A400%2C700%2C900%2C400italic%2C700italic%2C900italic%7CMontserrat%3A400%2C700%7CInconsolata%3A400&#038;subset=latin%2Clatin-ext&#038;display=fallback' media='all' /> <link rel='stylesheet' id='genericons-css' href='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/genericons/genericons.css?ver=20201208' media='all' /> <link rel='stylesheet' id='twentysixteen-style-css' href='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/style.css?ver=20201208' media='all' /> <link rel='stylesheet' id='twentysixteen-block-style-css' href='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/css/blocks.css?ver=20190102' media='all' /> <!--[if lt IE 10]> <link rel='stylesheet' id='twentysixteen-ie-css' href='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/css/ie.css?ver=20170530' media='all' /> <![endif]--> <!--[if lt IE 9]> <link rel='stylesheet' id='twentysixteen-ie8-css' href='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/css/ie8.css?ver=20170530' media='all' /> <![endif]--> <!--[if lt IE 8]> <link rel='stylesheet' id='twentysixteen-ie7-css' href='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/css/ie7.css?ver=20170530' media='all' /> <![endif]--> <!--[if lt IE 9]> <script src='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/js/html5.js?ver=3.7.3' id='twentysixteen-html5-js'></script> <![endif]--> <script src='https://www.effectiveperlprogramming.com/wp-includes/js/jquery/jquery.min.js?ver=3.6.0' id='jquery-core-js' type="59b8156d1c2e3dcb5d74bae3-text/javascript"></script> <script src='https://www.effectiveperlprogramming.com/wp-includes/js/jquery/jquery-migrate.min.js?ver=3.3.2' id='jquery-migrate-js' type="59b8156d1c2e3dcb5d74bae3-text/javascript"></script> <link rel="https://api.w.org/" href="https://www.effectiveperlprogramming.com/wp-json/" /><link rel="alternate" type="application/json" href="https://www.effectiveperlprogramming.com/wp-json/wp/v2/posts/2566" /><link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://www.effectiveperlprogramming.com/xmlrpc.php?rsd" /> <link rel="wlwmanifest" type="application/wlwmanifest+xml" href="https://www.effectiveperlprogramming.com/wp-includes/wlwmanifest.xml" /> <meta name="generator" content="WordPress 5.9.3" /> <link rel="canonical" href="https://www.effectiveperlprogramming.com/2020/06/turn-off-indirect-object-notation/" /> <link rel='shortlink' href='https://www.effectiveperlprogramming.com/?p=2566' /> <link rel="alternate" type="application/json+oembed" href="https://www.effectiveperlprogramming.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.effectiveperlprogramming.com%2F2020%2F06%2Fturn-off-indirect-object-notation%2F" /> <link rel="alternate" type="text/xml+oembed" href="https://www.effectiveperlprogramming.com/wp-json/oembed/1.0/embed?url=https%3A%2F%2Fwww.effectiveperlprogramming.com%2F2020%2F06%2Fturn-off-indirect-object-notation%2F&#038;format=xml" /> <link type="text/css" rel="stylesheet" href="/wp-content/plugins/syntax-highlighter-and-code-prettifier/styles/shCore.css" /> <link type="text/css" rel="stylesheet" href="/wp-content/plugins/syntax-highlighter-and-code-prettifier/styles/shThemeDefault.css" /> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shCore.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushBash.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushCpp.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushCSharp.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushCss.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushDelphi.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushDiff.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushGroovy.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushJava.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushJScript.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushPerl.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushPhp.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushPlain.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushPython.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushRuby.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushScala.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushSql.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushVb.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript" src="/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/shBrushXml.js"></script> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript"> SyntaxHighlighter.config.clipboardSwf = '/wp-content/plugins/syntax-highlighter-and-code-prettifier/scripts/clipboard.swf'; SyntaxHighlighter.all(); </script> </head> <body class="post-template-default single single-post postid-2566 single-format-standard wp-embed-responsive group-blog"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-dark-grayscale"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0 0.49803921568627" /><feFuncG type="table" tableValues="0 0.49803921568627" /><feFuncB type="table" tableValues="0 0.49803921568627" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-grayscale"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0 1" /><feFuncG type="table" tableValues="0 1" /><feFuncB type="table" tableValues="0 1" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-purple-yellow"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0.54901960784314 0.98823529411765" /><feFuncG type="table" tableValues="0 1" /><feFuncB type="table" tableValues="0.71764705882353 0.25490196078431" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-blue-red"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0 1" /><feFuncG type="table" tableValues="0 0.27843137254902" /><feFuncB type="table" tableValues="0.5921568627451 0.27843137254902" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-midnight"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0 0" /><feFuncG type="table" tableValues="0 0.64705882352941" /><feFuncB type="table" tableValues="0 1" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-magenta-yellow"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0.78039215686275 1" /><feFuncG type="table" tableValues="0 0.94901960784314" /><feFuncB type="table" tableValues="0.35294117647059 0.47058823529412" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-purple-green"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0.65098039215686 0.40392156862745" /><feFuncG type="table" tableValues="0 1" /><feFuncB type="table" tableValues="0.44705882352941 0.4" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 0 0" width="0" height="0" focusable="false" role="none" style="visibility: hidden; position: absolute; left: -9999px; overflow: hidden;" ><defs><filter id="wp-duotone-blue-orange"><feColorMatrix color-interpolation-filters="sRGB" type="matrix" values=" .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 .299 .587 .114 0 0 " /><feComponentTransfer color-interpolation-filters="sRGB" ><feFuncR type="table" tableValues="0.098039215686275 1" /><feFuncG type="table" tableValues="0 0.66274509803922" /><feFuncB type="table" tableValues="0.84705882352941 0.41960784313725" /><feFuncA type="table" tableValues="1 1" /></feComponentTransfer><feComposite in2="SourceGraphic" operator="in" /></filter></defs></svg><div id="page" class="site"> <div class="site-inner"> <a class="skip-link screen-reader-text" href="#content">Skip to content</a> <header id="masthead" class="site-header"> <div class="site-header-main"> <div class="site-branding"> <p class="site-title"><a href="https://www.effectiveperlprogramming.com/" rel="home">The Effective Perler</a></p> <p class="site-description">Effective Perl Programming &#8211; write better, more idiomatic Perl</p> </div><!-- .site-branding --> <button id="menu-toggle" class="menu-toggle">Menu</button> <div id="site-header-menu" class="site-header-menu"> <nav id="site-navigation" class="main-navigation" aria-label="Primary Menu"> <div class="menu-menu-container"><ul id="menu-menu" class="primary-menu"><li id="menu-item-2706" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2706"><a href="https://www.effectiveperlprogramming.com/toc/">TOC</a></li> <li id="menu-item-2707" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2707"><a href="https://www.effectiveperlprogramming.com/errata/">Errata</a></li> <li id="menu-item-2708" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2708"><a href="https://www.effectiveperlprogramming.com/about/">About</a></li> </ul></div> </nav><!-- .main-navigation --> </div><!-- .site-header-menu --> </div><!-- .site-header-main --> </header><!-- .site-header --> <div id="content" class="site-content"> <div id="primary" class="content-area"> <main id="main" class="site-main"> <article id="post-2566" class="post-2566 post type-post status-publish format-standard hentry category-5-32 category-5-36 category-idiomatic-perl tag-indirect-object-notation"> <header class="entry-header"> <h1 class="entry-title">Turn off indirect object notation</h1> </header><!-- .entry-header --> <div class="entry-content"> <p>Perl v5.32 adds a way to turn off a Perl feature that you shouldn&#8217;t use anyway. You can still use this feature, but now there&#8217;s a way to take it away from you.</p> <p><span id="more-2566"></span></p> <p>Indirect object notation is a way of putting the cart before the horse. The method name shows up in front of the invocant, whether a class name or an instance:</p> <pre class="brush:perl"> package Horse { sub new { bless {}, $_[0] } sub cart { print "Neigh!" } } my $horse = new Horse; cart $horse; </pre> <p>C++ programmers (maybe Java) may look and that and think &#8220;Yeah, so&#8221;, and that&#8217;s fine. But Perl having two ways to do it is one too many. It feels weird to say that, but in the code that makes the <code>perl</code> binary doesn&#8217;t have to use the same philosophy it extends to user code. If the Perl core didn&#8217;t have to support this second way, its parsing could be simpler. And, cleaner internals makes it easier to support new ideas. This sort of clean up in the past several years helps people help <code>perl</code>.</p> <p>Consider this problem that I encounter every week. I&#8217;ve forgotten to enable the <code>say</code> feature (wouldn&#8217;t it be nice if we could have nice things for free?), so I get a weird error:</p> <pre class="brush:perl"> use Mojo::URL; my $url = Mojo::URL->new( 'https://www.example.com' ); say $url; </pre> <p>Because Perl supports indirect object notation, the runtime error thinks that <code>say</code> must be a method for the <code>$url</code> object:</p> <pre class="brush:plain"> Can't locate object method "say" via package "Mojo::URL" </pre> <p>Imagine a package that had an <code>AUTOLOAD</code> that would try to handle that <code>say</code>. That&#8217;s some weird voodoo.</p> <p>I don&#8217;t think the indirect object notation was ever the dominant form, but it also wasn&#8217;t rare. Some popular modules used it in their docs. But, the direct object notation is modern practice. <a href="https://amzn.to/302c9uT">Perl Best Practices</a> recommends against it in section 15.12 and the Perl::Critic policy <A href="http://www.metacpan.org/pod/Perl::Critic::Policy::Objects::ProhibitIndirectSyntax">Objects::ProhibitIndirectSyntax</a> prohibit it. That&#8217;s 15 years ago!</p> <p>You should use the direct object notation, which you&#8217;re already likely to see most of time:</p> <pre class="brush:perl"> my $horse = Horse->new; $horse->cart; </pre> <p>This doesn&#8217;t help me avoid that mistake that I showed earlier. I wasn&#8217;t trying to use the indirect object and it still shows up. This is where the knobs and dials come in.</p> <p>Perl v5.32 now has a way to turn off the indirect object syntax. Actually, it has a way to turn it on, but it&#8217;s turned on by default in v5.32, and is already available in all previous Perl 5 versions. This still works and outputs &#8220;Neigh!&#8221;:</p> <pre class="brush:perl"> use v5.32; package Horse { sub new { bless {}, $_[0] } sub cart { print "Neigh!" } } my $horse = new Horse; cart $horse; </pre> <p>Use the <code>feature</code> pragma to turn off <code>indirect</code>:</p> <pre class="brush:perl"> use v5.32; no feature qw(indirect); package Horse { sub new { bless {}, $_[0] } sub cart { print "Neigh!" } } my $horse = new Horse; cart $horse; </pre> <p>With v5.36, you get this for free:</p> <pre class="brush:perl"> use v5.36; # no feature qw(indirect) for free </pre> <p>The error shows that <code>perl</code> doesn&#8217;t understand the code and gets confused that the method name:</p> <pre class="brush:plain"> Bareword found where operator expected at ..., near "new Horse" (Do you need to predeclare new?) Scalar found where operator expected at ..., near "cart $horse" (Do you need to predeclare cart?) syntax error at..., near "new Horse" Global symbol "$horse" requires explicit package name (did you forget to declare "my $horse"?) at ... </pre> <p>Change that to the direct object notation and it works again:</p> <pre class="brush:perl"> use v5.32; no feature qw(indirect); package Horse { sub new { bless {}, $_[0] } sub cart { print "Neigh!" } } my $horse = Horse->new; $horse->cart; </pre> <p>There&#8217;s a way that you can do this before v5.32 too. The CPAN module <a href="https://metacpan.org/pod/indirect">indirect</a> will warn about indirect object notation (but the method calls still work):</p> <pre class="brush:perl"> use v5.32; no indirect; package Horse { sub new { bless {}, $_[0] } sub cart { print "Neigh!" } } my $horse = new Horse; cart $horse; </pre> <p>The warning is better than the parser confusion for v5.32, so you might want to start with this module before turning off all uses (or use Perl::Critic too):</p> <pre class="brush:plain"> Neigh! Indirect call of method "new" on object "Horse" at ... line 10. Indirect call of method "cart" on object "$horse" at ... line 11. </pre> <p>Make that an error by importing <code>fatal</code>:</p> <pre class="brush:perl"> use v5.32; no indirect 'fatal'; package Horse { sub new { bless {}, $_[0] } sub cart { print "Neigh!" } } my $horse = new Horse; cart $horse; </pre> <p>Now the program dies on the <code>new</code>:</p> <pre class="brush:plain"> Indirect call of method "new" on object "Horse" at ... line 9. </pre> <h2>Indirect filehandles</h2> <p>Some of you may know that filehandles are objects but we generally treat them as functions. This is the reason there&#8217;s no comma between the filehandle and the first argument:</p> <pre class="brush:perl"> print STDOUT print { $filehandle } "Hello world"; $filehandle->print( "Hello world" ); </pre> <p>So far, <code>no feature qw(indirect)</code> does not disturb these.</p> <h2>Conclusion</h2> <p>Here&#8217;s the thing for you to think about: there&#8217;s a way for you to turn off this feature, but it&#8217;s enabled by default. You don&#8217;t have to stop using indirect object notation. But now Perl has that knob and dial and eventually might disable it by default.</p> </div><!-- .entry-content --> <footer class="entry-footer"> <span class="byline"><span class="author vcard"><img alt='' src='https://secure.gravatar.com/avatar/edd8638efe875601bfe394a8aea5b16d?s=49&#038;d=mm&#038;r=g' srcset='https://secure.gravatar.com/avatar/edd8638efe875601bfe394a8aea5b16d?s=98&#038;d=mm&#038;r=g 2x' class='avatar avatar-49 photo' height='49' width='49' loading='lazy'/><span class="screen-reader-text">Author </span> <a class="url fn n" href="https://www.effectiveperlprogramming.com/author/bdfoy/">brian d foy</a></span></span><span class="posted-on"><span class="screen-reader-text">Posted on </span><a href="https://www.effectiveperlprogramming.com/2020/06/turn-off-indirect-object-notation/" rel="bookmark"><time class="entry-date published" datetime="2020-06-17T14:50:51+00:00">June 17, 2020</time><time class="updated" datetime="2024-11-09T12:07:00+00:00">November 9, 2024</time></a></span><span class="cat-links"><span class="screen-reader-text">Categories </span><a href="https://www.effectiveperlprogramming.com/category/perl/5-32/" rel="category tag">5.32</a>, <a href="https://www.effectiveperlprogramming.com/category/perl/5-36/" rel="category tag">5.36</a>, <a href="https://www.effectiveperlprogramming.com/category/book/chapters/idiomatic-perl/" rel="category tag">Idiomatic Perl</a></span><span class="tags-links"><span class="screen-reader-text">Tags </span><a href="https://www.effectiveperlprogramming.com/tag/indirect-object-notation/" rel="tag">indirect object notation</a></span> </footer><!-- .entry-footer --> </article><!-- #post-2566 --> <nav class="navigation post-navigation" aria-label="Posts"> <h2 class="screen-reader-text">Post navigation</h2> <div class="nav-links"><div class="nav-previous"><a href="https://www.effectiveperlprogramming.com/2020/03/chain-comparisons-to-avoid-excessive-typing/" rel="prev"><span class="meta-nav" aria-hidden="true">Previous</span> <span class="screen-reader-text">Previous post:</span> <span class="post-title">Chain comparisons to avoid excessive typing</span></a></div><div class="nav-next"><a href="https://www.effectiveperlprogramming.com/2020/06/match-unicode-character-names-with-a-pattern/" rel="next"><span class="meta-nav" aria-hidden="true">Next</span> <span class="screen-reader-text">Next post:</span> <span class="post-title">Match Unicode character names with a pattern</span></a></div></div> </nav> </main><!-- .site-main --> </div><!-- .content-area --> <aside id="secondary" class="sidebar widget-area"> <section id="text-5" class="widget widget_text"> <div class="textwidget"><div id="book_picture" align="center"> <a href="https://amzn.to/2QtvIa2"><img src="/images/epp_second_edition.png" vspace="15px" border="0" alt="Effective Programming Perl book cover"/></a> </div> <br/> <div id="donate" align="center"> <script async type="59b8156d1c2e3dcb5d74bae3-text/javascript" id='fbnufur'>(function(i){var f,s=document.getElementById(i);f=document.createElement('iframe');f.src='//button.flattr.com/view/?uid=briandfoy&button=compact&url='+encodeURIComponent(document.URL);f.title='Flattr';f.height=20;f.width=110;f.style.borderWidth=0;s.parentNode.insertBefore(f,s);})('fbnufur');</script> <br/> <form action="https://www.paypal.com/cgi-bin/webscr" method="post"> <input type="hidden" name="cmd" value="_s-xclick" /> <input type="hidden" name="hosted_button_id" value="11077925" /> <input type="image" src="https://www.paypalobjects.com/en_US/i/btn/btn_donate_SM.gif" border="0" name="submit" alt="PayPal - The safer, easier way to pay online!" /> <img alt="" border="0" src="https://www.paypalobjects.com/en_US/i/scr/pixel.gif" width="1" height="1" /> </form> </div></div> </section> <section id="recent-posts-3" class="widget widget_recent_entries"> <h2 class="widget-title">Latest Items</h2><nav aria-label="Latest Items"> <ul> <li> <a href="https://www.effectiveperlprogramming.com/2024/11/perl-v5-36-new-features/">Perl v5.36 new features</a> </li> <li> <a href="https://www.effectiveperlprogramming.com/2024/11/goodbye-fake-multidimensional-data-structures/">Goodbye fake multidimensional data structures</a> </li> <li> <a href="https://www.effectiveperlprogramming.com/2024/10/switch-removed-from-the-v5-36-feature-bundle/">switch removed from the v5.36 feature bundle</a> </li> <li> <a href="https://www.effectiveperlprogramming.com/2024/09/know-if-something-is-a-boolean/">Know if something is a boolean</a> </li> </ul> </nav></section><section id="categories-3" class="widget widget_categories"><h2 class="widget-title">Topics</h2><form action="https://www.effectiveperlprogramming.com" method="get"><label class="screen-reader-text" for="cat">Topics</label><select name='cat' id='cat' class='postform' > <option value='-1'>Select Category</option> <option class="level-0" value="3">administrative note&nbsp;&nbsp;(26)</option> <option class="level-1" value="54">&nbsp;&nbsp;&nbsp;midweek bonus item&nbsp;&nbsp;(7)</option> <option class="level-1" value="64">&nbsp;&nbsp;&nbsp;promotion&nbsp;&nbsp;(1)</option> <option class="level-1" value="4">&nbsp;&nbsp;&nbsp;publishing&nbsp;&nbsp;(15)</option> <option class="level-2" value="30">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;eBook&nbsp;&nbsp;(7)</option> <option class="level-3" value="47">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ePub&nbsp;&nbsp;(2)</option> <option class="level-3" value="48">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;iPad&nbsp;&nbsp;(3)</option> <option class="level-3" value="45">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Kindle&nbsp;&nbsp;(4)</option> <option class="level-3" value="46">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PDF&nbsp;&nbsp;(1)</option> <option class="level-3" value="52">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Safari Books Online&nbsp;&nbsp;(2)</option> <option class="level-2" value="29">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;translations&nbsp;&nbsp;(2)</option> <option class="level-1" value="39">&nbsp;&nbsp;&nbsp;reader feedback&nbsp;&nbsp;(1)</option> <option class="level-0" value="10">book&nbsp;&nbsp;(191)</option> <option class="level-1" value="9">&nbsp;&nbsp;&nbsp;chapters&nbsp;&nbsp;(163)</option> <option class="level-2" value="55">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;cpan&nbsp;&nbsp;(3)</option> <option class="level-2" value="23">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;databases&nbsp;&nbsp;(2)</option> <option class="level-2" value="19">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;distributions&nbsp;&nbsp;(4)</option> <option class="level-2" value="12">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;files &amp; filehandles&nbsp;&nbsp;(6)</option> <option class="level-2" value="51">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Idiomatic Perl&nbsp;&nbsp;(5)</option> <option class="level-2" value="13">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;miscellany&nbsp;&nbsp;(37)</option> <option class="level-2" value="31">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;references&nbsp;&nbsp;(8)</option> <option class="level-2" value="20">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;regular expressions&nbsp;&nbsp;(39)</option> <option class="level-2" value="8">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;subroutines&nbsp;&nbsp;(13)</option> <option class="level-2" value="57">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;testing&nbsp;&nbsp;(6)</option> <option class="level-2" value="11">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;The Basics of Perl&nbsp;&nbsp;(26)</option> <option class="level-2" value="15">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Unicode&nbsp;&nbsp;(23)</option> <option class="level-2" value="67">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;warnings&nbsp;&nbsp;(4)</option> <option class="level-1" value="17">&nbsp;&nbsp;&nbsp;new chapters&nbsp;&nbsp;(38)</option> <option class="level-2" value="61">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DateTime&nbsp;&nbsp;(2)</option> <option class="level-2" value="26">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;debugging&nbsp;&nbsp;(8)</option> <option class="level-2" value="63">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;documentation&nbsp;&nbsp;(1)</option> <option class="level-2" value="22">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;external interactions&nbsp;&nbsp;(1)</option> <option class="level-2" value="40">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;formats&nbsp;&nbsp;(1)</option> <option class="level-2" value="24">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;html&nbsp;&nbsp;(1)</option> <option class="level-2" value="33">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;networking&nbsp;&nbsp;(1)</option> <option class="level-2" value="44">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;numbers&nbsp;&nbsp;(3)</option> <option class="level-2" value="53">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;object-oriented programming&nbsp;&nbsp;(11)</option> <option class="level-2" value="60">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pack&nbsp;&nbsp;(1)</option> <option class="level-2" value="65">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PAUSE&nbsp;&nbsp;(1)</option> <option class="level-2" value="25">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;performance&nbsp;&nbsp;(5)</option> <option class="level-2" value="38">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Programming tips&nbsp;&nbsp;(3)</option> <option class="level-2" value="85">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;security&nbsp;&nbsp;(1)</option> <option class="level-2" value="18">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;xml&nbsp;&nbsp;(2)</option> <option class="level-1" value="32">&nbsp;&nbsp;&nbsp;table of contents&nbsp;&nbsp;(1)</option> <option class="level-0" value="49">conferences&nbsp;&nbsp;(2)</option> <option class="level-0" value="6">event announcement&nbsp;&nbsp;(5)</option> <option class="level-1" value="37">&nbsp;&nbsp;&nbsp;book signing&nbsp;&nbsp;(1)</option> <option class="level-1" value="7">&nbsp;&nbsp;&nbsp;classroom training&nbsp;&nbsp;(4)</option> <option class="level-1" value="34">&nbsp;&nbsp;&nbsp;yapc&nbsp;&nbsp;(2)</option> <option class="level-0" value="50">free stuff&nbsp;&nbsp;(1)</option> <option class="level-0" value="14">git&nbsp;&nbsp;(3)</option> <option class="level-0" value="59">item&nbsp;&nbsp;(104)</option> <option class="level-0" value="5">perl&nbsp;&nbsp;(124)</option> <option class="level-1" value="28">&nbsp;&nbsp;&nbsp;5.10&nbsp;&nbsp;(12)</option> <option class="level-1" value="27">&nbsp;&nbsp;&nbsp;5.12&nbsp;&nbsp;(15)</option> <option class="level-1" value="41">&nbsp;&nbsp;&nbsp;5.14&nbsp;&nbsp;(13)</option> <option class="level-1" value="58">&nbsp;&nbsp;&nbsp;5.16&nbsp;&nbsp;(7)</option> <option class="level-1" value="66">&nbsp;&nbsp;&nbsp;5.18&nbsp;&nbsp;(7)</option> <option class="level-1" value="68">&nbsp;&nbsp;&nbsp;5.20&nbsp;&nbsp;(11)</option> <option class="level-1" value="69">&nbsp;&nbsp;&nbsp;5.22&nbsp;&nbsp;(6)</option> <option class="level-1" value="70">&nbsp;&nbsp;&nbsp;5.24&nbsp;&nbsp;(4)</option> <option class="level-1" value="73">&nbsp;&nbsp;&nbsp;5.26&nbsp;&nbsp;(13)</option> <option class="level-1" value="74">&nbsp;&nbsp;&nbsp;5.28&nbsp;&nbsp;(10)</option> <option class="level-1" value="89">&nbsp;&nbsp;&nbsp;5.30&nbsp;&nbsp;(6)</option> <option class="level-1" value="91">&nbsp;&nbsp;&nbsp;5.32&nbsp;&nbsp;(6)</option> <option class="level-1" value="96">&nbsp;&nbsp;&nbsp;5.34&nbsp;&nbsp;(5)</option> <option class="level-1" value="99">&nbsp;&nbsp;&nbsp;5.36&nbsp;&nbsp;(8)</option> <option class="level-1" value="100">&nbsp;&nbsp;&nbsp;5.38&nbsp;&nbsp;(2)</option> <option class="level-1" value="101">&nbsp;&nbsp;&nbsp;5.40&nbsp;&nbsp;(1)</option> <option class="level-1" value="43">&nbsp;&nbsp;&nbsp;5.8&nbsp;&nbsp;(1)</option> <option class="level-1" value="79">&nbsp;&nbsp;&nbsp;broken feature&nbsp;&nbsp;(5)</option> <option class="level-1" value="86">&nbsp;&nbsp;&nbsp;experimental&nbsp;&nbsp;(2)</option> <option class="level-1" value="92">&nbsp;&nbsp;&nbsp;fixed feature&nbsp;&nbsp;(2)</option> <option class="level-1" value="42">&nbsp;&nbsp;&nbsp;new features&nbsp;&nbsp;(19)</option> <option class="level-1" value="71">&nbsp;&nbsp;&nbsp;removed features&nbsp;&nbsp;(7)</option> <option class="level-0" value="16">presentations&nbsp;&nbsp;(2)</option> <option class="level-0" value="35">talks&nbsp;&nbsp;(2)</option> <option class="level-1" value="36">&nbsp;&nbsp;&nbsp;slides available&nbsp;&nbsp;(2)</option> </select> </form> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript"> /* <![CDATA[ */ (function() { var dropdown = document.getElementById( "cat" ); function onCatChange() { if ( dropdown.options[ dropdown.selectedIndex ].value > 0 ) { dropdown.parentNode.submit(); } } dropdown.onchange = onCatChange; })(); /* ]]> */ </script> </section><section id="archives-3" class="widget widget_archive"><h2 class="widget-title">Archives</h2> <label class="screen-reader-text" for="archives-dropdown-3">Archives</label> <select id="archives-dropdown-3" name="archive-dropdown"> <option value="">Select Month</option> <option value='https://www.effectiveperlprogramming.com/2024/11/'> November 2024 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2024/10/'> October 2024 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2024/09/'> September 2024 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2024/08/'> August 2024 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2024/07/'> July 2024 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2024/06/'> June 2024 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2024/05/'> May 2024 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2024/03/'> March 2024 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2023/12/'> December 2023 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2023/11/'> November 2023 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2023/07/'> July 2023 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2021/03/'> March 2021 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2020/07/'> July 2020 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2020/06/'> June 2020 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2020/03/'> March 2020 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2020/01/'> January 2020 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2019/09/'> September 2019 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2019/07/'> July 2019 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2019/03/'> March 2019 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2019/02/'> February 2019 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2018/12/'> December 2018 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2018/10/'> October 2018 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2018/09/'> September 2018 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2018/08/'> August 2018 &nbsp;(5)</option> <option value='https://www.effectiveperlprogramming.com/2018/04/'> April 2018 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2018/01/'> January 2018 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2017/12/'> December 2017 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2017/09/'> September 2017 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2017/08/'> August 2017 &nbsp;(3)</option> <option value='https://www.effectiveperlprogramming.com/2017/04/'> April 2017 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2017/01/'> January 2017 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2016/12/'> December 2016 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2016/06/'> June 2016 &nbsp;(3)</option> <option value='https://www.effectiveperlprogramming.com/2016/04/'> April 2016 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2016/03/'> March 2016 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2016/01/'> January 2016 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2015/11/'> November 2015 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2015/10/'> October 2015 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2015/08/'> August 2015 &nbsp;(3)</option> <option value='https://www.effectiveperlprogramming.com/2015/07/'> July 2015 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2015/06/'> June 2015 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2015/05/'> May 2015 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2015/04/'> April 2015 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2015/02/'> February 2015 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2015/01/'> January 2015 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2014/12/'> December 2014 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2014/11/'> November 2014 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2014/10/'> October 2014 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2014/09/'> September 2014 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2014/08/'> August 2014 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2014/07/'> July 2014 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2014/06/'> June 2014 &nbsp;(3)</option> <option value='https://www.effectiveperlprogramming.com/2013/08/'> August 2013 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2013/06/'> June 2013 &nbsp;(3)</option> <option value='https://www.effectiveperlprogramming.com/2013/05/'> May 2013 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2012/10/'> October 2012 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2012/08/'> August 2012 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2012/07/'> July 2012 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2012/04/'> April 2012 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2012/03/'> March 2012 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2012/02/'> February 2012 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2012/01/'> January 2012 &nbsp;(2)</option> <option value='https://www.effectiveperlprogramming.com/2011/12/'> December 2011 &nbsp;(4)</option> <option value='https://www.effectiveperlprogramming.com/2011/11/'> November 2011 &nbsp;(3)</option> <option value='https://www.effectiveperlprogramming.com/2011/10/'> October 2011 &nbsp;(5)</option> <option value='https://www.effectiveperlprogramming.com/2011/09/'> September 2011 &nbsp;(5)</option> <option value='https://www.effectiveperlprogramming.com/2011/08/'> August 2011 &nbsp;(4)</option> <option value='https://www.effectiveperlprogramming.com/2011/07/'> July 2011 &nbsp;(6)</option> <option value='https://www.effectiveperlprogramming.com/2011/06/'> June 2011 &nbsp;(5)</option> <option value='https://www.effectiveperlprogramming.com/2011/05/'> May 2011 &nbsp;(5)</option> <option value='https://www.effectiveperlprogramming.com/2011/04/'> April 2011 &nbsp;(4)</option> <option value='https://www.effectiveperlprogramming.com/2011/03/'> March 2011 &nbsp;(4)</option> <option value='https://www.effectiveperlprogramming.com/2011/02/'> February 2011 &nbsp;(5)</option> <option value='https://www.effectiveperlprogramming.com/2011/01/'> January 2011 &nbsp;(6)</option> <option value='https://www.effectiveperlprogramming.com/2010/12/'> December 2010 &nbsp;(8)</option> <option value='https://www.effectiveperlprogramming.com/2010/11/'> November 2010 &nbsp;(7)</option> <option value='https://www.effectiveperlprogramming.com/2010/10/'> October 2010 &nbsp;(8)</option> <option value='https://www.effectiveperlprogramming.com/2010/09/'> September 2010 &nbsp;(5)</option> <option value='https://www.effectiveperlprogramming.com/2010/08/'> August 2010 &nbsp;(7)</option> <option value='https://www.effectiveperlprogramming.com/2010/07/'> July 2010 &nbsp;(10)</option> <option value='https://www.effectiveperlprogramming.com/2010/06/'> June 2010 &nbsp;(5)</option> <option value='https://www.effectiveperlprogramming.com/2010/05/'> May 2010 &nbsp;(10)</option> <option value='https://www.effectiveperlprogramming.com/2010/04/'> April 2010 &nbsp;(8)</option> <option value='https://www.effectiveperlprogramming.com/2010/03/'> March 2010 &nbsp;(4)</option> <option value='https://www.effectiveperlprogramming.com/2010/02/'> February 2010 &nbsp;(6)</option> <option value='https://www.effectiveperlprogramming.com/2010/01/'> January 2010 &nbsp;(7)</option> <option value='https://www.effectiveperlprogramming.com/2009/12/'> December 2009 &nbsp;(1)</option> <option value='https://www.effectiveperlprogramming.com/2008/01/'> January 2008 &nbsp;(1)</option> </select> <script type="59b8156d1c2e3dcb5d74bae3-text/javascript"> /* <![CDATA[ */ (function() { var dropdown = document.getElementById( "archives-dropdown-3" ); function onSelectChange() { if ( dropdown.options[ dropdown.selectedIndex ].value !== '' ) { document.location.href = this.options[ this.selectedIndex ].value; } } dropdown.onchange = onSelectChange; })(); /* ]]> */ </script> </section><section id="text-6" class="widget widget_text"><h2 class="widget-title">External Links</h2> <div class="textwidget"><ul> <li><a href="https://www.amazon.com/gp/product/0321496949/ref=as_li_tl?ie=UTF8&amp;camp=1789&amp;creative=9325&amp;creativeASIN=0321496949&amp;linkCode=as2&amp;tag=hashbang09-20&amp;linkId=JLZLK3MHRS2VVEJW">Amazon.com</a></li> <li><a href="https://www.pearsonhighered.com/educator/product/Effective-Perl-Programming-Ways-to-Write-Better-More-Idiomatic-Perl-2E/9780321496942.page">publisher catalog page</a></li> <li><a href="https://www.informit.com/store/product.aspx?isbn=0321496949">InformIT page (book and PDF)</a></li> <li><a href="https://my.safaribooksonline.com/9780321718303">Safari Books Online</a></li> <li><a href="https://www.ebooks.com/ebooks/book_display.asp?IID=515079">eBooks (PDF and ePub)</a></li> </ul></div> </section><section id="text-3" class="widget widget_text"> <div class="textwidget"><div align="center"> <script async type="59b8156d1c2e3dcb5d74bae3-text/javascript"> var amzn_wdgt={widget:'Carousel'}; amzn_wdgt.tag='hashbang09-20'; amzn_wdgt.widgetType='ASINList'; amzn_wdgt.title='Our Perl Books'; amzn_wdgt.width='250'; amzn_wdgt.ASIN='1449303587,1449393098,144939311X,0321496949,059600492,0596004923'; amzn_wdgt.width='200'; amzn_wdgt.height='600'; </script> <script async type="59b8156d1c2e3dcb5d74bae3-text/javascript" src='https://wms.assoc-amazon.com/20070822/US/js/swfobject_1_5.js'> </script> </div></div> </section> </aside><!-- .sidebar .widget-area --> </div><!-- .site-content --> <footer id="colophon" class="site-footer"> <nav class="main-navigation" aria-label="Footer Primary Menu"> <div class="menu-menu-container"><ul id="menu-menu-1" class="primary-menu"><li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2706"><a href="https://www.effectiveperlprogramming.com/toc/">TOC</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2707"><a href="https://www.effectiveperlprogramming.com/errata/">Errata</a></li> <li class="menu-item menu-item-type-post_type menu-item-object-page menu-item-2708"><a href="https://www.effectiveperlprogramming.com/about/">About</a></li> </ul></div> </nav><!-- .main-navigation --> <div class="site-info"> <span class="site-title"><a href="https://www.effectiveperlprogramming.com/" rel="home">The Effective Perler</a></span> <a href="https://wordpress.org/" class="imprint"> Proudly powered by WordPress </a> </div><!-- .site-info --> </footer><!-- .site-footer --> </div><!-- .site-inner --> </div><!-- .site --> <script src='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/js/skip-link-focus-fix.js?ver=20170530' id='twentysixteen-skip-link-focus-fix-js' type="59b8156d1c2e3dcb5d74bae3-text/javascript"></script> <script id='twentysixteen-script-js-extra' type="59b8156d1c2e3dcb5d74bae3-text/javascript"> var screenReaderText = {"expand":"expand child menu","collapse":"collapse child menu"}; </script> <script src='https://www.effectiveperlprogramming.com/wp-content/themes/twentysixteen/js/functions.js?ver=20181217' id='twentysixteen-script-js' type="59b8156d1c2e3dcb5d74bae3-text/javascript"></script> <script src="/cdn-cgi/scripts/7d0fa10a/cloudflare-static/rocket-loader.min.js" data-cf-settings="59b8156d1c2e3dcb5d74bae3-|49" defer></script></body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10