2 <html lang="en-us" itemscope itemtype="http://schema.org/Article">
5 <meta name="description" content="Many people write code and specify all kinds of what I call "syntactic sugar". These come in the form of largely punctuation characters especially in Perl. Such things are usually included for the benefit of the compiler or more correctly...">
6 <meta name="generator" content="Movable Type 5.2.3">
7 <title>Syntactical sugar - Status</title>
8 <link rel="alternate" type="application/atom+xml" title="Recent Entries" href="http://defaria.com/blogs/Status/atom.xml">
9 <link rel="canonical" href="http://defaria.com/blogs/Status/2014/09/syntactical-sugar.html">
10 <meta name="viewport" content="width=device-width,initial-scale=1">
11 <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles.css">
13 <link rel="stylesheet" href="http://defaria.com/blogs/Status/styles_ie.css">
14 <script src="/mt/mt-static/support/theme_static/rainier/js/html5shiv.js"></script>
17 <link rel="start" href="http://defaria.com/blogs/Status/">
19 <link rel="prev" href="http://defaria.com/blogs/Status/2014/04/-setting-up-putty-to.html" title="Setting up PuTTY to do passwordless logins using pre-shared key">
20 <link rel="next" href="http://defaria.com/blogs/Status/2016/02/configuring-linux-to-authenticate-to-active-directory-using-winbind.html" title="Configuring Linux to Authenticate to Active Directory using Winbind">
21 <!-- Open Graph Protocol -->
22 <meta property="og:type" content="article">
23 <meta property="og:locale" content="en-us">
24 <meta property="og:title" content="Syntactical sugar">
25 <meta property="og:url" content="http://defaria.com/blogs/Status/2014/09/syntactical-sugar.html">
26 <meta property="og:description" content="Many people write code and specify all kinds of what I call "syntactic sugar". These come in the form of largely punctuation characters especially in Perl. Such things are usually included for the benefit of the compiler or more correctly...">
27 <meta property="og:site_name" content="Status">
28 <meta property="og:image" content="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
30 <meta itemprop="description" content="Many people write code and specify all kinds of what I call "syntactic sugar". These come in the form of largely punctuation characters especially in Perl. Such things are usually included for the benefit of the compiler or more correctly...">
31 <link itemprop="url" href="http://defaria.com/blogs/Status/2014/09/syntactical-sugar.html">
32 <link itemprop="image" href="/mt/mt-static/support/theme_static/rainier/img/siteicon-sample.png">
37 <div id="container-inner">
38 <header id="header" role="banner">
39 <div id="header-inner">
40 <div id="header-content">
42 <a href="http://defaria.com/blogs/Status/">
51 <nav role="navigation">
53 <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
62 <div id="content-inner">
63 <ul class="breadcrumb breadcrumb-list">
64 <li class="breadcrumb-list-item"><a href="http://defaria.com/blogs/Status/">Home</a></li>
65 <li class="breadcrumb-list-item">Syntactical sugar</li>
67 <div id="individual-main" class="main" role="main">
68 <article id="entry-1987" class="entry entry-asset asset hentry">
69 <div class="asset-header">
70 <h2 itemprop="name" class="asset-name entry-title">Syntactical sugar</h2>
71 <footer class="asset-meta">
72 <ul class="asset-meta-list">
73 <li class="asset-meta-list-item">Posted on <time datetime="2014-09-23T11:00:40-08:00" itemprop="datePublished">September 23, 2014</time></li>
74 <li class="asset-meta-list-item">by <span class="author entry-author vcard"></span></li>
77 <li class="asset-meta-list-item">in <a itemprop="articleSection" rel="tag" href="http://defaria.com/blogs/Status/audience/">Audience</a></li>
83 <div class="entry-content asset-content" itemprop="articleBody">
84 <p>Many people write code and specify all kinds of what I call "syntactic sugar". These come in the form of largely punctuation characters especially in Perl. Such things are usually included for the benefit of the compiler or more correctly the parser. They are there to avoid ambigutity but a coding style of specifing all of the defaults so that it's clear is IMHO ridiculous. Humans and human understanding of languages uses short cuts, context and implied meaning. Write your code for the next human - not the parser.</p>
85 <p>So, for example, I encountered the following line of Perl code the other day:</p>
86 <pre>if (scalar(@ARGV != 1)) { die "\nUsage:\nAD_auth.pl \%username\%\n" }</pre>
87 <p>Here are some of the unnecessary syntactic sugar:</p>
89 <li>scalar is unnessesary. An array evaluated in a scalar context, returns the number of entries in the area. Comparing an array to a number like 1 is evaluating an array in a scalar context.</li>
90 <li>The () around @ARGV != 1. Parantheses used to specify correct presidence in mathimatical expressions - sure, but only as many as you need. Here however the parantheses are unnessesary. Sure some say "it's a function call therefore its parms should be enclosed in ()" I ask "why?". Do you always likewise do print ("a string") or do you do print "a string"?</li>
91 <li>The () around the boolean expression for if. It's require, unless if appears at the end...</li>
92 <li>The {} around the then portion of the if statement. Technically not needed as without them the die statement would be the only statement in the then block. However in practice I pretty much always use {} even if only one statement. I find that way too often I need to stick more statements in there and if so then {} are already there.</li>
93 <li>Needless escape of %: There is no need to specify \%. Oh, and this is a bad, non-portable practice as if they meant %username% as in expand the environment variable username well that'd only work in Windows.</li>
95 <p>How do I think this would be better written:</p>
96 <pre>die "Usage: $FindBin::Script <username>\n" unless @ARGV == 1;</pre>
97 <p>I believe the advantages are:</p>
99 <li>Dynamically obtaining the script's name instead of hard coding it</li>
100 <li>Specifying <username> is a more standard way of indicating that the user should fill in this parameter</li>
101 <li>Positive logic, with the help of unless. Unless is like if not. But I find too many nots become confusing. It took a little bit of time for me to feel comfortable with unless, to trust it was the right thing. But it's pretty much English - unless the array ARGV has only 1 element. Unless also reads better at the end of a line.</li>
105 <nav class="page-navigation entry-navigation pagination content-nav">
106 <ul class="page-navigation-list">
108 <li class="page-navigation-list-item page-navigation-prev"><a rel="prev" href="http://defaria.com/blogs/Status/2014/04/-setting-up-putty-to.html" title="Setting up PuTTY to do passwordless logins using pre-shared key">Previous entry</a></li>
111 <li class="page-navigation-list-item page-navigation-next"><a rel="next" href="http://defaria.com/blogs/Status/2016/02/configuring-linux-to-authenticate-to-active-directory-using-winbind.html" title="Configuring Linux to Authenticate to Active Directory using Winbind">Next entry</a></li>
116 <aside id="zenback" class="zenback feedback">
117 Please paste Zenback script code here.
124 <aside class="widgets related" role="complementary">
125 <nav class="widget-search widget">
126 <div class="widget-content">
127 <form method="get" id="search" action="http://defaria.com/mt/mt-search.cgi">
129 <input type="text" name="search" value="" placeholder="Search...">
131 <input type="hidden" name="IncludeBlogs" value="8">
133 <input type="hidden" name="limit" value="20">
134 <button type="submit" name="button">
135 <img alt="Search" src="/mt/mt-static/support/theme_static/rainier/img/search-icon.png">
141 <nav class="widget-archive-category widget">
142 <h3 class="widget-header">Categories</h3>
143 <div class="widget-content">
146 <ul class="widget-list">
149 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/ameriquest/">Ameriquest (99)</a>
157 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/audience/">Audience (4)</a>
165 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/broadcom/">Broadcom (76)</a>
173 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/gpdb/">GPDB (35)</a>
181 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-dynamics/">General Dynamics (61)</a>
189 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/general-electric/">General Electric (13)</a>
197 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/hewlett-packard/">Hewlett Packard (13)</a>
205 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/lynuxworks/">LynuxWorks (162)</a>
213 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/pqa/">PQA (35)</a>
221 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/salira/">Salira (79)</a>
229 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/tellabs/">Tellabs (2)</a>
237 <li class="widget-list-item"><a href="http://defaria.com/blogs/Status/texas-instruments/">Texas Instruments (31)</a>
249 <nav class="widget-archive-dropdown widget">
250 <h3 class="widget-header">Archives</h3>
251 <div class="widget-content">
253 <option>Select a Month...</option>
255 <option value="http://defaria.com/blogs/Status/2016/02/">February 2016</option>
259 <option value="http://defaria.com/blogs/Status/2014/09/">September 2014</option>
263 <option value="http://defaria.com/blogs/Status/2014/04/">April 2014</option>
267 <option value="http://defaria.com/blogs/Status/2014/03/">March 2014</option>
271 <option value="http://defaria.com/blogs/Status/2013/02/">February 2013</option>
275 <option value="http://defaria.com/blogs/Status/2012/09/">September 2012</option>
279 <option value="http://defaria.com/blogs/Status/2012/08/">August 2012</option>
283 <option value="http://defaria.com/blogs/Status/2012/05/">May 2012</option>
287 <option value="http://defaria.com/blogs/Status/2012/04/">April 2012</option>
291 <option value="http://defaria.com/blogs/Status/2012/02/">February 2012</option>
295 <option value="http://defaria.com/blogs/Status/2012/01/">January 2012</option>
299 <option value="http://defaria.com/blogs/Status/2011/10/">October 2011</option>
303 <option value="http://defaria.com/blogs/Status/2011/07/">July 2011</option>
307 <option value="http://defaria.com/blogs/Status/2010/09/">September 2010</option>
311 <option value="http://defaria.com/blogs/Status/2010/08/">August 2010</option>
315 <option value="http://defaria.com/blogs/Status/2010/04/">April 2010</option>
319 <option value="http://defaria.com/blogs/Status/2010/03/">March 2010</option>
323 <option value="http://defaria.com/blogs/Status/2010/02/">February 2010</option>
327 <option value="http://defaria.com/blogs/Status/2009/05/">May 2009</option>
331 <option value="http://defaria.com/blogs/Status/2009/04/">April 2009</option>
335 <option value="http://defaria.com/blogs/Status/2008/07/">July 2008</option>
339 <option value="http://defaria.com/blogs/Status/2008/05/">May 2008</option>
343 <option value="http://defaria.com/blogs/Status/2008/04/">April 2008</option>
347 <option value="http://defaria.com/blogs/Status/2008/03/">March 2008</option>
351 <option value="http://defaria.com/blogs/Status/2008/02/">February 2008</option>
355 <option value="http://defaria.com/blogs/Status/2008/01/">January 2008</option>
359 <option value="http://defaria.com/blogs/Status/2007/12/">December 2007</option>
363 <option value="http://defaria.com/blogs/Status/2007/11/">November 2007</option>
367 <option value="http://defaria.com/blogs/Status/2007/10/">October 2007</option>
371 <option value="http://defaria.com/blogs/Status/2007/09/">September 2007</option>
375 <option value="http://defaria.com/blogs/Status/2007/08/">August 2007</option>
379 <option value="http://defaria.com/blogs/Status/2007/07/">July 2007</option>
383 <option value="http://defaria.com/blogs/Status/2007/06/">June 2007</option>
387 <option value="http://defaria.com/blogs/Status/2007/05/">May 2007</option>
391 <option value="http://defaria.com/blogs/Status/2007/04/">April 2007</option>
395 <option value="http://defaria.com/blogs/Status/2007/03/">March 2007</option>
399 <option value="http://defaria.com/blogs/Status/2007/01/">January 2007</option>
403 <option value="http://defaria.com/blogs/Status/2006/12/">December 2006</option>
407 <option value="http://defaria.com/blogs/Status/2006/11/">November 2006</option>
411 <option value="http://defaria.com/blogs/Status/2006/10/">October 2006</option>
415 <option value="http://defaria.com/blogs/Status/2006/09/">September 2006</option>
419 <option value="http://defaria.com/blogs/Status/2006/07/">July 2006</option>
423 <option value="http://defaria.com/blogs/Status/2006/06/">June 2006</option>
427 <option value="http://defaria.com/blogs/Status/2006/05/">May 2006</option>
431 <option value="http://defaria.com/blogs/Status/2006/04/">April 2006</option>
435 <option value="http://defaria.com/blogs/Status/2006/03/">March 2006</option>
439 <option value="http://defaria.com/blogs/Status/2006/02/">February 2006</option>
443 <option value="http://defaria.com/blogs/Status/2006/01/">January 2006</option>
447 <option value="http://defaria.com/blogs/Status/2005/12/">December 2005</option>
451 <option value="http://defaria.com/blogs/Status/2005/11/">November 2005</option>
455 <option value="http://defaria.com/blogs/Status/2005/10/">October 2005</option>
459 <option value="http://defaria.com/blogs/Status/2005/09/">September 2005</option>
463 <option value="http://defaria.com/blogs/Status/2005/08/">August 2005</option>
467 <option value="http://defaria.com/blogs/Status/2005/07/">July 2005</option>
471 <option value="http://defaria.com/blogs/Status/2005/06/">June 2005</option>
475 <option value="http://defaria.com/blogs/Status/2005/05/">May 2005</option>
479 <option value="http://defaria.com/blogs/Status/2005/04/">April 2005</option>
483 <option value="http://defaria.com/blogs/Status/2005/03/">March 2005</option>
487 <option value="http://defaria.com/blogs/Status/2005/02/">February 2005</option>
491 <option value="http://defaria.com/blogs/Status/2005/01/">January 2005</option>
495 <option value="http://defaria.com/blogs/Status/2004/12/">December 2004</option>
499 <option value="http://defaria.com/blogs/Status/2004/09/">September 2004</option>
503 <option value="http://defaria.com/blogs/Status/2004/08/">August 2004</option>
507 <option value="http://defaria.com/blogs/Status/2004/07/">July 2004</option>
511 <option value="http://defaria.com/blogs/Status/2004/06/">June 2004</option>
515 <option value="http://defaria.com/blogs/Status/2004/05/">May 2004</option>
519 <option value="http://defaria.com/blogs/Status/2004/04/">April 2004</option>
523 <option value="http://defaria.com/blogs/Status/2004/03/">March 2004</option>
527 <option value="http://defaria.com/blogs/Status/2004/02/">February 2004</option>
531 <option value="http://defaria.com/blogs/Status/2004/01/">January 2004</option>
535 <option value="http://defaria.com/blogs/Status/2003/12/">December 2003</option>
539 <option value="http://defaria.com/blogs/Status/2003/11/">November 2003</option>
547 <div class="widget-syndication widget section">
548 <div class="widget-content">
549 <p><img src="http://defaria.com/mt/mt-static/images/status_icons/feed.gif" alt="Subscribe to feed" width="9" height="9" /> <a href="http://defaria.com/blogs/Status/atom.xml">Subscribe to this blog's feed</a></p>
557 <footer id="footer" role="contentinfo">
558 <div id="footer-inner">
559 <div id="footer-content">
560 <nav role="navigation">
562 <li><a href="http://defaria.com/blogs/Status/">Home</a></li>
568 <p class="license">© Copyright 2016.</p>
569 <p class="poweredby">Powered by <a href="http://www.movabletype.org/">Movable Type</a></p>
575 <script src="http://defaria.com/mt/mt-static/jquery/jquery.min.js"></script>
576 <script src="http://defaria.com/blogs/Status/mt-theme-scale2.js"></script>