On Mon, Dec 2, 2019 at 9:39 PM ToddAndMargo via perl6-users <perl6-users@perl.org <mailto:perl6-users@perl.org>> wrote:

    Hi All,

      From the manual page of rmdir:
    https://docs.perl6.org/routine/rmdir

            sub    rmdir(*@dirs --> List:D)
            method rmdir(IO::Path:D: --> True)

    Does *@dirs mean I can give it multiple directories
    as an array?

    What does  "--> List:D" give me back?  An array
    of Booleans as to which directories successfully removed?
    And what is a "List:D?" anyway?


           ...throws an exception of type X::IO::Rmdir if
           the directory cannot be removed

    Does this crash the program or just return a "false"?
    Does it tell me what went wrong, as in "so and so" has
    "such and such" file(s) open and locked?

    To delete non-empty directory, see rmtree in File::Directory::Tree
    module.

    Seems to me I should not have to import a module for
    this.  Most rmdir command have a "parents" flag.  Am
    I missing something?

    Many thanks,
    -T

On 2019-12-02 19:46, Paul Procacci wrote:
It seems to me all your questions are answered by the very documentation you referenced.

 >> Does *@dirs mean I can give it multiple directories as an array?

Remove the invocant ....  in sub form .... of the provided directories in the given list .....

Example:
-------------------------
# mkdir {a,b} ; ls -ld a b ; `which perl6` -e "rmdir('a','b')" ; ls -ld a b
drwxr-xr-x  2 root  wheel  2 Dec  2 22:22 a
drwxr-xr-x  2 root  wheel  2 Dec  2 22:22 b
ls: a: No such file or directory
ls: b: No such file or directory


 >> What does  "--> List:D" give me back?

It gives you back a list of directories that it successfully removed.
Example:
--------------------------------
# mkdir a ; ls -ld a b ; `which perl6` -e "rmdir('a','b').perl.say"
ls: b: No such file or directory
drwxr-xr-x  2 root  wheel  2 Dec  2 22:23 a
["a"]
# mkdir {a,b} ; ls -ld a b ; `which perl6` -e "rmdir('a','b').perl.say"
drwxr-xr-x  2 root  wheel  2 Dec  2 22:23 a
drwxr-xr-x  2 root  wheel  2 Dec  2 22:23 b
["a", "b"]

 >> And what is a "List:D?" anyway?

https://docs.perl6.org/type/Signature#Constraining_argument_definiteness

The above link explains it fully.  Though it uses "Int:D" as an example it still applies.

 >>      ...throws an exception of type X::IO::Rmdir if
 >>     the directory cannot be removed
 >>
 >> Does this crash the program or just return a "false"?

On success it return a Bool::True.
On failure it throws an exception.
It doesn't crash the program.
If you are interested in handling the exception, add logic to handle it.

Examples:
---------------------------
# mkdir a ; `which perl6` -e "'a'.IO.rmdir.perl.say"
Bool::True
# mkdir a ; `which perl6` -e "'b'.IO.rmdir.perl.say"
Failure.new(exception => X::IO::Rmdir.new(path => "/root/test/b", os-error => "Failed to rmdir: no such file or directory"), backtrace => Backtrace.new) # mkdir a ; `which perl6` -e "try { 'b'.IO.rmdir.perl.say; CATCH { default { 'tsk tsk'.say }}}"
tsk tsk


>> Does it tell me what went wrong, as in "so and so" has "such and such" file(s) open and locked?
See previous example.  It throws an exception with a detailed error message.

>> To delete non-empty directory, see rmtree in File::Directory::Tree module.
 >>
 >> Seems to me I should not have to import a module for
 >> this.  Most rmdir command have a "parents" flag.  Am
 >> I missing something?

It's true that most binaries with the name rmdir have a p switch for removing "empty directories" which I won't argue could be added to perl6 proper. That documentation you are referencing though is concerning "non-empty directories" and there no such flag for any rmdir binary I've seen.

~Paul


Thank you!

Reply via email to