【问题标题】:How to create multiple directories from a single full path in Perl? [duplicate]如何从 Perl 中的单个完整路径创建多个目录? [复制]
【发布时间】:2012-06-12 09:45:20
【问题描述】:

可能重复:
How do I create a directory and parent directories in one Perl command?

鉴于这种情况: 我有一个像“37093”这样的ID。 我执行一些 perl 代码来创建一个路径名

my $id = "37093";
my $path = join('/', split(//, $id ) );

路径现在是:“3/7/0/9/3”;

现在我想递归地创建所有尚未创建的目录。

如何轻松做到这一点?

【问题讨论】:

  • 该语言称为 Perl 或 perl 而不是 PERL。
  • @dgw: 我用大写字母来强调所使用的编程语言 - 把它改回 PERL

标签: perl


【解决方案1】:

File::PathTry::Tiny

use File::Path qw(make_path);
use Try::Tiny;

try {
    make_path '3/7/0/9/3';
} catch {
    warn "make_path failed: $_\n";
}

【讨论】:

  • 如果没有非标准异常处理代码,恕我直言,这个答案会更有用。
  • @Thariama:你有一个旧版本的File::Path(当前版本是v2.08)。您应该升级模块,但在这种情况下,您可以在任何地方用mkpath 替换make_path
  • 要么使用旧版接口mkpath,要么更好地升级模块。你不应该运行过时的软件! make_path already appeared 4 years ago in version 2.06_05has since been shipped in 39 releases of Perl
  • “无法升级”肯定是夸张的。您可以安装自己的模块副本,local::lib 让这一切变得简单;另见How can I install a CPAN module into a local directory?
  • 通常的反驳是:不允许安装现有核心 Perl 模块的更新版本,但允许安装从 Stack Overflow 获得的代码?区别在哪里?是什么让这里的代码更值得信赖?
【解决方案2】:
mkdir -p $the_path

希望对您有所帮助。

或自己编写,但我发现这应该会有所帮助且更优雅: http://perldoc.perl.org/File/Path.html

【讨论】:

  • 从脚本调用时它的外观如何?
  • 你可以使用调用系统来完成它。见perldoc.perl.org/functions/system.html
  • +1 嗯,可以,但是不使用系统命令是否可以(看起来不是很优雅)?
  • ehh,是的,我认为您可以自己编写一个递归函数,就像这样(对不起,我不是 perl 编码器):(但是如何开始新行)..?
  • @Marcus Well FWIW 我认为这是一个非常糟糕的答案。使用system 来完成在Perl 提供的标准模块 中实现的简单递归mkdir 是a) 低效和b) 潜在的安全漏洞。
猜你喜欢
  • 2015-07-24
  • 2011-01-09
  • 2017-11-07
  • 1970-01-01
  • 2016-07-06
  • 2016-08-12
  • 1970-01-01
  • 2011-07-17
  • 1970-01-01
相关资源
最近更新 更多