Fellow monks,

I have started playing around with Perl closures lately following the very good Closure on Closures tutorial by broquaint, and I thought I'd write an iterator to access, one by one, the files recursively contained within a directory path. The problem, when written in a recursive way, is very simple; this is a simple solution (a better solution would avoid returning lists, but this is simple and works):

use strict; sub recursiveReadDir { my ($dir) = @_; my @res; my $f = ''; my $ff = ''; local (*D); print "Reading: $dir ...\n"; opendir(D, $dir)|| die "can't opendir $dir: $!"; while ( defined( $f = readdir( D ) ) ) { $ff = $dir . '/' . $f; next if $f =~ /^\.{1,3}$/; if ( -d $ff ) { push @res, recursiveRead( $ff ); } else { push @res, $ff; } } closedir D; return @res; } print recursiveRead( "c:/inetpub/wwwroot" );
I was thinking about how to convert this code into an iterator built with closures, but I'm frankly clueless at it. Is it possible, feasible and reasonable? Could you explain me how?

In reply to Turning a recursive function into an iterator by l3nz

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.