<div dir="ltr"><div>Сходу придумалось вот такое:</div><div><br></div><div>for (1..5) {</div><div>  unless (state $done++) { </div><div>    say "once";</div><div>  }</div><div>  say;</div><div>}</div><div><br></div>

<div>Наверняка можно столкнуться с условиями, в которых работать не будет. Как минимум для каждой копии анонимной функции создаётся своя переменная:</div><div><br></div><div>sub make {</div><div>  unless (state $done++) {</div>

<div>    # once</div><div>    say "init make";</div><div>  }</div><div>  return sub {</div><div>    # а тут уже не работает, в каждой sub { ... } своя копия $done</div><div>    unless (state $done++) {</div><div>

      say "make";</div><div>    }</div><div>  }</div><div>}</div><div>make->();</div><div>make->();</div><div>make->();</div><div><br></div><div>say '---';</div><div>my $ref = make();</div><div>

$ref->();</div><div>$ref->();</div><div>$ref->();</div><div><br></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">7 февраля 2014 г., 20:19 пользователь Харпалёв Иван <span dir="ltr"><<a href="mailto:ivan.kharpalev@gmail.com" target="_blank">ivan.kharpalev@gmail.com</a>></span> написал:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Доброго времени суток, могучий MoscowPM;<div><br></div><div>Скажите, есть ли какие-то решения, чтобы кусок кода выполнялся ровно один раз? ( за время жизни программы)</div>

<div><br></div><div>например</div><div>
<br></div><div>for (...) {</div>
<div>       do_once { code to be executed only once };</div><div>       ....</div><div>}</div><div>do_once  { some_more() };</div><div><br></div><div>Или как такое посоветуете делать?</div><div>Чтобы по caller определялось, место вызова и куда-то запоминалось или ещё как-то?</div>


<div><br></div><div>С уважением</div><div><br></div></div>
<br>--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div>