Instead of opendir and friends, in Perl 6 there is a single dir subroutine, returning a list of the files in a specified directory, defaulting to the current directory. A piece of code speaks a thousand words (some result lines are line-wrapped for better readability):

# in the Rakudo source directory > dir build parrot_install Makefile VERSION parrot docs Configure.pl README dynext t src tools CREDITS LICENSE Test.pm > dir 't' 00-parrot 02-embed spec harness 01-sanity pmc spectest.data

dir has also an optional named parameter test , used to grep the results

> dir 'src/core', test => any(/^C/, /^P/) Parcel.pm Cool.pm Parameter.pm Code.pm Complex.pm CallFrame.pm Positional.pm Capture.pm Pair.pm Cool-num.pm Callable.pm Cool-str.pm

Directories are created with mkdir , as in mkdir('foo')

The easiest way to read a file in Perl 6 is using slurp . slurp returns the contents of a file, as a String,

> slurp 'VERSION' 2010.11

The good, old way of using filehandles is of course still available

> my $fh = open 'CREDITS' IO()<0x1105a068> > $fh.getc # reads a single character = > $fh.get # reads a single line pod > $fh.close; $fh = open 'new', :w # open for writing IO()<0x10f3e704> > $fh.print('foo') Bool::True > $fh.say('bar') Bool::True > $fh.close; say slurp('new') foobar

Testing the existence and types of files is done with smartmatching (~~). Again, the code:

> 'LICENSE'.IO ~~ :e # does the file exist? Bool::True > 'LICENSE'.IO ~~ :d # is it a directory? Bool::False > 'LICENSE'.IO ~~ :f # a file then? Bool::True

Easy peasy.

When the standard features are not enough, modules come in handy. File::Find (available in the File::Tools package) traverses the directory tree looking for the files you need, and generates a lazy lists of the found ones. File::Find comes shipped with Rakudo Star, and can be easily installed with neutro if you have just a bare Rakudo.

Example usage? Sure. find(:dir<t/dir1>, :type<file>, :name(/foo/)) will generate a lazy list of files (and files only) in a directory named t/dir1 and with a name matching the regex /foo/ . Notice how the elements of a list are not just plain strings: they’re objects which strinigify to the full path, but also provide accessors for the directory they’re in ( dir ) and the filename itself ( name ). For more info please refer to the documentation.