The dir method gives you entries in the directory you pass. If you don't pass a test it'll use the default test which is none(".", ".."), i.e. "anything except . and ..".
I'm not sure why using { .IO.d } as the test would not give you b, though. Can you check what "a/b".IO.d outputs? Maybe that can give us a clue. HTH - Timo On 24/11/2018 22:18, Fernando Santagata wrote: > Hello, > > I think that I don't understand how the 'test' argument of 'dir' works. > I have a directory 'a', which contains a subdirectory 'b' and a file > 'c'; I want to select only the subdirectories of 'a'. > > Using the REPL I tried to ask the content of the directory 'a': > > > my @dirs = dir('a') > ["a/c".IO "a/b".IO] > > my @dirs = dir('a', test => { .IO.d }) > ["a/.".IO "a/..".IO] > Why omitting the test the code returns the right list, while adding > the test it returns just '.' and '..'? > > If I do the same thing for the top level directory '.' the behavior is > different: > > > my @dirs = dir('.', test => { .IO.d }) > [".".IO "a".IO "..".IO] > > Now I can see the directory 'a'. > If I descend a level, doing a 'cd a', the behavior is consistent with > what I see at the previous level. > I'm confused. > > I'm using version 2018.10. > > -- > Fernando Santagata