title: Why is parenthesis optional only after sub declaration?
body: <p><em>(Assume <code>use strict; use warnings;</code> throughout this question.)</em></p>
  
  <p>I am exploring the usage of <code>sub</code>.</p>
  
  <pre><code>sub bb { print @_; }
  bb 'a';
  </code></pre>
  
  <p>This works as expected. The parenthesis is optional, like with many other functions, like <code>print, open</code> etc.</p>
  
  <p>However, this causes a compilation error:</p>
  
  <pre><code>bb 'a';
  sub bb { print @_; }
  
  String found where operator expected at t13.pl line 4, near "bb 'a'"
          (Do you need to predeclare bb?)
  syntax error at t13.pl line 4, near "bb 'a'"
  Execution of t13.pl aborted due to compilation errors.
  </code></pre>
  
  <p>But this does not:</p>
  
  <pre><code>bb('a');
  sub bb { print @_; }
  </code></pre>
  
  <p>Similarly, a sub without args, such as:</p>
  
  <pre><code>special_print;
  my special_print { print $some_stuff }
  </code></pre>
  
  <p>Will cause this error:</p>
  
  <pre><code>Bareword "special_print" not allowed while "strict subs" in use at t13.pl line 6.
  Execution of t13.pl aborted due to compilation errors.
  </code></pre>
  
  <p>Ways to alleviate this particular error is:</p>
  
  <ul>
  <li>Put &amp; before the sub name, e.g. <code>&amp;special_print</code></li>
  <li>Put empty parenthesis after sub name, e.g. <code>special_print()</code></li>
  <li>Predeclare <code>special_print</code> with <code>sub special_print</code> at the top of the script.</li>
  <li>Call <code>special_print</code> after the sub declaration.</li>
  </ul>
  
  <p>My question is, why this special treatment? If I can use a sub globally within the script, why can't I use it any way I want it? Is there a logic to <code>sub</code> being implemented this way?</p>
  
  <p>ETA: I know how I can fix it. I want to know the logic behind this.</p>