我正在使用mkpath创建目录。
mkpath('/home/myhome') or die "Create of directory failed: $!";
如果目录不存在,则此方法有效,但如果该目录存在则会失败。 从perldocs它说它类似于mkdir -p unix。但是,如果目录已存在,则该命令不会失败。
我应该注意什么才能安静地创建一个包含多个路径的目录? v5.8.8
答案 0 :(得分:3)
mkpath
会在出错时抛出异常,因此您需要以下内容:
mkpath('/home/myhome');
如果您需要自定义消息,可以使用以下内容:
eval { mkpath('/home/myhome'); 1 }
or die "Can't create home directory: $@\n";
请注意使用$@
,而不是$!
。
答案 1 :(得分:1)
doc说:
该函数返回实际创建的目录列表 电话;在标量上下文中创建的目录数。
正如ikdegami指出的那样,下一个错误处理将不起作用
mkpath($path) or print "Error creating $path\n" unless -d $path;
因为mkpath会因致命错误而嘶哑。 (使用Carp),因此可以更快地终止执行,因为可以打印错误消息。
...除非mkpath
的执行被困在eval块中。 (见ikegami's anser)
使用eval捕获,只会返回一个错误。 e.g:
eval { mkpath($p2, $p3); 1 } or die "Can't create home directory: $@\n";
如果$p1
和$p2
都失败了 - 则不会报告所有错误。要打印出所有错误,您可以使用自定义变量来存储诊断消息,请参阅文档的ERROR HANDLING部分
在这种情况下,mkpath不会嘶哑,如果发生致命错误,将返回成功创建的目录数(在标量上下文中),如:
mkpath($path1, $path2 , {error => \my $err});
来自doc:
请注意,如果没有遇到错误,$ err将引用空 阵列。这意味着$ err将始终为TRUE;所以你需要 测试@ $ err以确定是否发生错误。
您可以将它们全部打印出来,请参阅文档中的示例。