<div dir="ltr">Красиво. Мне нравится.<div><br></div><div>Но надо объяснять коллегам, что не очень хорошо. Предпочел бы что-то не требующее сокровенного знания, но это замечание скорее к автору вопроса.</div></div><div class="gmail_extra"><br><div class="gmail_quote">3 февраля 2016 г., 1:46 пользователь Andrey Kovbovich <span dir="ltr"><<a href="mailto:akovbovich@gmail.com" target="_blank">akovbovich@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">Ваня, привет. Такой итератор подойдет? :))<div><br></div><div><pre style="color:rgb(51,51,51)"><span style="font-weight:bold">use</span> <span style="font-weight:bold">strict</span>;
<span style="font-weight:bold">use</span> <span style="font-weight:bold">warnings</span>;

<span style="color:rgb(112,113,131)">{</span>
    <span style="font-weight:bold">package</span> <span style="font-weight:bold">MyFnIter</span>;
    <span style="font-weight:bold">sub</span> <span style="font-weight:bold">OPEN</span> <span style="color:rgb(115,136,214)">{</span>
        <span style="font-style:italic">my</span> <span style="color:rgb(144,145,131)">(</span>$<span>obj</span>, $<span>fh</span><span style="color:rgb(144,145,131)">)</span> = @<span style="text-decoration:underline"><span>_</span></span>;
        $<span>obj</span>-><span style="color:rgb(144,145,131)">{</span>data<span style="color:rgb(144,145,131)">}</span> = $<span>fh</span>;
    <span style="color:rgb(115,136,214)">}</span>
    <span style="font-weight:bold">sub</span> <span style="font-weight:bold">PUSHED</span> <span style="color:rgb(115,136,214)">{</span>
        <span style="font-style:italic">my</span> <span style="color:rgb(144,145,131)">(</span>$<span>class</span><span style="color:rgb(144,145,131)">)</span> = @<span style="text-decoration:underline"><span>_</span></span>;
        bless <span style="color:rgb(144,145,131)">{}</span>, $<span>class</span>;
    <span style="color:rgb(115,136,214)">}</span>
    <span style="font-weight:bold">sub</span> <span style="font-weight:bold">FILL</span> <span style="color:rgb(115,136,214)">{</span>
        <span style="font-style:italic">my</span> <span style="color:rgb(144,145,131)">(</span>$<span>obj</span>, $<span>fh</span><span style="color:rgb(144,145,131)">)</span> = @<span style="text-decoration:underline"><span>_</span></span>;
        <span style="font-weight:bold">if</span><span style="color:rgb(144,145,131)">(</span>defined<span style="color:rgb(112,152,112)">(</span>$<span>obj</span>-><span style="color:rgb(144,115,115)">{</span>buf<span style="color:rgb(144,115,115)">}</span><span style="color:rgb(112,152,112)">)</span><span style="color:rgb(144,145,131)">)</span> <span style="color:rgb(144,145,131)">{</span>
            undef $<span>obj</span>-><span style="color:rgb(112,152,112)">{</span>buf<span style="color:rgb(112,152,112)">}</span>;
            <span style="font-weight:bold">return</span>;
        <span style="color:rgb(144,145,131)">}</span>
        <span style="font-weight:bold">else</span><span style="color:rgb(144,145,131)">{</span>
            $<span>obj</span>-><span style="color:rgb(112,152,112)">{</span>buf<span style="color:rgb(112,152,112)">}</span> = <span style="color:rgb(112,152,112)">(</span>$<span>_</span><span style="color:rgb(144,115,115)">[</span><span style="font-weight:bold">0</span><span style="color:rgb(144,115,115)">]{</span>data<span style="color:rgb(144,115,115)">}</span><span style="color:rgb(112,152,112)">)</span>-><span style="color:rgb(112,152,112)">()</span>;
            <span style="font-weight:bold">return</span> $<span>obj</span>-><span style="color:rgb(112,152,112)">{</span>buf<span style="color:rgb(112,152,112)">}</span>;
        <span style="color:rgb(144,145,131)">}</span>
    <span style="color:rgb(115,136,214)">}</span>
<span style="color:rgb(112,113,131)">}</span>

<span style="font-style:italic">my</span> $<span>fn</span> = <span style="font-weight:bold">sub</span> <span style="color:rgb(112,113,131)">{</span> rand <span style="color:rgb(112,113,131)">}</span>;
open <span style="font-style:italic">my</span> $<span>iter</span>, <span style="color:rgb(102,102,102)">"<:via(MyFnIter)"</span>, $<span>fn</span>;

<span style="font-weight:bold">while</span><span style="color:rgb(112,113,131)">(</span><span style="font-style:italic">my</span> $<span>val</span> = <$<span>iter</span>><span style="color:rgb(112,113,131)">)</span> <span style="color:rgb(112,113,131)">{</span>
    print <span style="color:rgb(102,102,102)">"$val\n"</span>;
<span style="color:rgb(112,113,131)">}</span></pre></div></div><div class="gmail_extra"><br><div class="gmail_quote">2 февраля 2016 г., 23:13 пользователь Evgeniy Vansevich <span dir="ltr"><<a href="mailto:evgeniy@just4i.ru" target="_blank">evgeniy@just4i.ru</a>></span> написал:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5"><div> зачем?.. Потом ищи-свищи какой умник коде переопределил readline.</div><div>Раскалённой кочергой за это надо<img src="cid:smile21"></div><div> </div><div>02.02.2016, 23:00, "Mons Anderson" <<a href="mailto:mons@cpan.org" target="_blank">mons@cpan.org</a>>:</div><div><div><blockquote type="cite"><p><$var> - это readline<br><br>BEGIN{<br>    *CORE::GLOBAL::readline = sub { ... };<br>}<br><br><span></span></p></blockquote></div></div><br></div></div><span class="">--<br>
Moscow.pm mailing list<br>
<a href="mailto:moscow-pm@pm.org" target="_blank">moscow-pm@pm.org</a> | <a href="http://moscow.pm.org" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
<br></span></blockquote></div><br></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" rel="noreferrer" target="_blank">http://moscow.pm.org</a><br>
<br></blockquote></div><br></div>