Rand Stats

IO::Dir

zef:raku-community-modules

Build Status

NAME

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

SYNOPSIS

    # Won't always suit, since non-exhausted iterator holds on to an open
    # file descriptor until GC:
    'foo'.IO.dir[^3].say;

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

DESCRIPTION

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

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.

METHODS

.new

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

.open

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.

    $dir1.open;
    $dir2.open: 'foo';

.dir

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 IO::Dir.open: 'foo';

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

.close

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

    .dir[^3].say and .close with IO::Dir.open: 'foo';

REPOSITORY

Fork this module on GitHub: https://github.com/raku-community-modules/IO-Dir

BUGS

To report bugs or request features, please use https://github.com/raku-community-modules/IO-Dir/issues

AUTHOR

Zoffix Znet (http://perl6.party/)

LICENSE

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.