Perl make_路径未按指定设置模式

Perl make_路径未按指定设置模式,perl,path,permissions,Perl,Path,Permissions,当我调用make_path(从核心模块提供模式时,创建的目录没有我请求的模式: $ perl -MFile::Path=make_path -e 'make_path("foobar", { mode=>0770 });' $ ls -ld foobar/ drwxr-x--- 2 itk itkadm 4096 Sep 19 11:10 foobar/ 我希望看到: drwxrwx--- 2 itk itkadm 4096 Sep 19 11:07 foobar/ 我在文档中遗漏了这

当我调用
make_path
(从核心模块提供模式时,创建的目录没有我请求的模式:

$ perl -MFile::Path=make_path -e 'make_path("foobar", { mode=>0770 });'
$ ls -ld foobar/
drwxr-x--- 2 itk itkadm 4096 Sep 19 11:10 foobar/
我希望看到:

drwxrwx--- 2 itk itkadm 4096 Sep 19 11:07 foobar/

我在文档中遗漏了这个细节:

模式:应用于每个已创建目录的数字权限模式 (默认为0777),由当前umask修改

我没有预料到这一点,因为shell等效(<代码> MKDIR- M 0770 -P FoBOAR )没有考虑。

这与预期的效果一样:

$ perl -MFile::Path=make_path -e 'umask(0); make_path("foobar", { mode=>0770 });'
$ ls -ld foobar/
drwxrwx--- 2 itk itkadm 4096 Sep 19 11:13 foobar/
注意
umask(0)


正如Evan Carroll所指出的那样,
File::Path的版本被较新的perl版本(>=5.24)所取代使用
chmod
选项,这可能是设置已创建目录模式的更方便的方法。

而不是将目录的权限设置为
0
。尝试只使用
chmod
选项设置
File::Path::make\u Path

perl -MFile::Path=make_path -e 'make_path("foobar", { chmod=>0770 });'

只要使用chmod就可以了。这个chmod选项是在Perl5.24中添加的。当我遇到这个问题时,它并不存在。