perl - 如何使用 Perl 的 mkdir 创建具有 'right' 权限的目录?

标签 perl directory mkdir

我需要这个程序的帮助。作为我项目的一部分,我需要
创建一个目录。我正在使用系统功能来执行此操作,但是
后来被告知 Perl 有一个名为 mkdir 的内置函数。 .

我在 Ubuntu 10.04 上。问题是mkdir似乎没有按需要工作。

它创建目录,但权限不同。这里
是我创建目录的函数:

sub createDir {
       my ($dir,$perm) = @_;
       unless(-d $dir) {
               mkdir $dir,$perm or die "$!";
       }
}

我在程序的许多部分都将其称为:
createDir('.today','0755');

目录 .today 已创建,但问题在于权限,
它没有 0755允许。

我究竟做错了什么?

我的 Perl 详细信息是:

$perl -v

这是 perl,为 x86_64-linux-thread-multi 构建的 v5.8.8

最佳答案

您将权限作为 传递字符串 . mkdir预计它是 数字 .但是字符串中的八进制数被解释为 十进制 .所以'0755'被解释为十进制 755并且正在被 mkdir 使用.

要解决此问题,您可以调用传递给它数字权限的子程序:

createDir('.today',0755);

或者,您可以使用 oct函数将八进制字符串转换为数值。

子程序调用保持不变:
createDir('.today','0755');

但它的定义改为使用 oct功能如下:
mkdir $dir,oct($perm) or die "$!";

关于perl - 如何使用 Perl 的 mkdir 创建具有 'right' 权限的目录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4057528/

相关文章:

perl - 客户端浏览器关闭时中断服务器端 perl CGI 脚本

mysql - 如何在带有变量的mysql perl中创建子例程

java - liblpsolve55.so : cannot open shared object file: No such file or directory

Perl Archive::Zip 创建不必要的文件夹

c - Windows Makefile c mkdir -p $@

gradle - 在Gradle中测试目录是否存在?

perl - 在 @INC 中找不到 Config.pm

perl - 在 Perl 中,子程序如何获得指向自身的 coderef?

C#:如何打开选择了多个文件的 Windows 资源管理器窗口

PowerShell:如果 "mkdir"命令的文件已存在,如何抑制错误?