【问题标题】:What does 'Cwd' and 'qw' mean in perl? [closed]perl中的'Cwd'和'qw'是什么意思? [关闭]
【发布时间】:2020-09-07 05:50:11
【问题描述】:

在 perl 中,我们导入/使用模块 use Cwd; qw 作为列表/数组的表示。

但是,我在一些代码中看到它如下所述。

use Cwd qw(realpath cwd);
realpath( $0 ) =~ /(.+)\/[^\/]+$/;
require "$1/some_file.pl"

这是什么意思?你能帮我理解吗?

【问题讨论】:

  • documentation of use 是一个很好的起点
  • use MODULE LIST 加载 MODULE 并将其在 LIST 中给出的符号导入到当前包中。所以use Cwd 'getcwd' 会将getcwd 导入到当前包中。如果只做use Cwd,符号getcwd将无法直接使用,需要写Cwd::getcwd()调用函数

标签: perl


【解决方案1】:

qw/STRING/ 是引用词quote-like operator

qw(realpath cwd)

等价于

split(' ', q(realpath cwd))

因此

'realpath', 'cwd'

所以,

use Cwd qw(realpath cwd);

等价于

use Cwd 'realpath', 'cwd';

根据the documentation

use Module LIST;

等价于

BEGIN {
   require Module;
   Module->import(LIST);
}

所以

use Cwd 'realpath', 'cwd';

等价于

BEGIN {
   require Cwd;
   Cwd->import('realpath', 'cwd');
}

那么import 做了什么?好吧,这完全取决于模块。模块将列出的符号导出到调用者的命名空间是很常见的。 Cwd 也不例外。

因此,以下加载 Cwd(如果尚未加载),并从中导入函数 realpathcwd

use Cwd qw(realpath cwd);

最后,

$0,记录在perlvar 中,是正在执行的脚本的名称。

realpath($0) 是正在执行的脚本的绝对路径,符号链接已解析。

正则表达式匹配用于提取直到最后一个 / 的所有内容,即脚本所在的目录名称。

最后,require 执行指定的文件。 (虽然require 不是correct tool。)

您的代码的更简单版本:

use FindBin qw( $RealBin );
require("$RealBin/some_file.pl");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-03-05
    • 1970-01-01
    • 2010-12-28
    • 2011-09-15
    • 2010-12-29
    • 2014-09-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多