IO::Path.dir you can close
Perl 6
Switch branches/tags
Nothing to show
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Failed to load latest commit information.

Build Status


IO::Dir - IO::Path.dir you can close


    # Won't always suit, since non-exhausted iterator holds on to an open
    # file descriptor until GC:

    # all good; we explicitly close the file descriptor when done
    .dir[^3].say and .close with 'foo';


IO::Path.dir does the job well for most cases, however, there's an edge case where it's no good:

  • You don't exhaust or eagerly evaluate the Seq dir returns
  • You do that enough times in some tight loop that GC doesn't get a chance to clean up unreachable dir Seqs; or
  • You run this on some system with tight open file limits

If you're in that category, then good news! IO::Dir gives you a dir whose file descriptor you can close without relying on GC or having to fully reify the dir's Seq.



Creates a new IO::Dir object. Takes no args.


Opens for reading directory given as a positional argument, which can be any object that can be coerced to IO::Path via .IO method. Defaults to opening '.' directory.

Will first .close the invocant if it was previously opened.

    $ 'foo';


Takes similar arguments as IO::Path.dir, that have the same meaning, returning the same type of Seq. Will .close the invocant when the result is exhausted.

The additional arguments are boolean :absolute and :Str that control whether to return absolute paths when dir was opened via an absolute path and whether to return paths as IO::Path or Str objects.

Note: you cannot call .dir more than once; re-open the invocant or create a new IO::Dir if you need that. Will die if called on an un-opened IO::Dir.

    # Explicit close:
    .dir[^3].say and .close with 'foo';

    # Implicit close (arrays are mostly-eager, so our Seq is exhausted here)
    my @files ='foo').dir;


Closes an open IO::Dir, freeing the file descriptor.

    .dir[^3].say and .close with 'foo';


Fork this module on GitHub:


To report bugs or request features, please use


Zoffix Znet (


You can use and distribute this module under the terms of the The Artistic License 2.0. See the LICENSE file included in this distribution for complete details.

The META6.json file of this distribution may be distributed and modified without restrictions or attribution.