note
Eliya
<p> Well, it seems File::Path::make_path uses plain [doc://mkdir] calls under the hood, which don't honor special bits.<sup>1</sup> I.e., the following wouldn't work either </p>
<c>
$ perl -e 'mkdir "foo", 02750'
$ ls -ld foo
drwxr-x--- 2 eliya eliya 4096 Apr 27 11:40 foo/
</c>
<p> while [doc://chmod] does </p>
<c>
$ perl -e 'mkdir "foo", 0750; chmod 02750, "foo"'
$ ls -ld foo
drwxr-s--- 2 eliya eliya 4096 Apr 27 11:41 foo/
</c>
<p>___</p>
<p> <sup>1</sup> This is OS specific; it has nothing to do with Perl. Perl just passes through the mode value to the <c>mkdir</c> system call (see <c>man 2 mkdir</c>). </p>
<p> The command <c>mkdir -pm2750 foo</c> also has to apply a <c>chmod</c> after having used <c>mkdir</c>: </p>
<c>
$ strace mkdir -pm2750 foo
...
mkdir("foo", 02750) = 0
open("foo", O_RDONLY|O_NOCTTY|O_NONBLOCK|O_DIRECTORY|O_NOFOLLOW) = 3
fstat(3, {st_mode=S_IFDIR|0750, st_size=4096, ...}) = 0
fchmod(3, 02750) = 0 <---
...
</c>
967556
967562