<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote"><div>Hi Ynon.</div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">
<div dir="ltr"><div><div><div><div></div>I recently tried some symbol table manipulations and encountered the following:<br><br></div>This code works:<br>$main::{foo} = sub { warn &#39;M::Foo&#39; };<br>foo();<br>
<br></div>But this one doesn&#39;t:<br>BEGIN {<br>  $main::{foo} = sub { warn &#39;M::Foo&#39; };<br>}<br>foo();<br></div></div></blockquote><div><br></div><div>Weird indeed. but why do you use &#39;$&#39; before main? I don&#39;t understand why the first example works at all. </div>
<div>As I read it, you are assigning a code ref to the scalar $main::foo. why calling to foo() afterwards works?</div><div><br></div><div>If I&#39;d write this code, it will be:</div><div><br></div><div><div>BEGIN {</div>
<div>  no strict &#39;refs&#39;;</div><div>  *{&quot;main::foo&quot;} = sub { warn &#39;M::Foo&#39; };</div><div>}</div><div>foo();</div></div><div><br></div><div>(and it works)</div><div><br></div><div>Shmuel.</div><div>
 </div></div></div></div>