in reply to Handling returns from mkdir.

To find out the errors from an external command, like mkdir, then you should read the doocumentation for that command. For mkdir(1) the POSIX standard gives two possible return codes, 0 (success) and >0 (failure), but does not mention error messages. The man pages on Linux don't give any more information.

For built-ins like mkdir, they are (mostly) based on the C API of the same name, so we look at sections 2 and 3 of the man pages, for example:
man 2 mkdir
This will usually give a list of error numbers from $! which can be tested for (the POSIX standard is similar). These are exposed within Perl through the Errno module. The POSIX standard lists: EACCES, EEXIST, ELOOP, EMLINK, ENAMETOOLONG, ENOENT, ENOSPC, ENOTDIR, EROFS, but your UNIX/Linx implememtation could have more.

On Windows, mkdir /? gives no information on errors. For the C interface, consult the MSDN mkdir, which only lists EEXIST and ENOENT as possible errors. However, that does make the assumption that your Windows implementaion uses the POSIX mkdir or ISO C _mkdir, it could be using the Win32 API CreateDirectory instead. The good news on that though is that the possible errors are similar to mkdir.