'Cwd' 和 'qw' 在 perl 中是什么意思?

Sta*_*uru 0 perl

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

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

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

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

ike*_*ami 6

qw/STRING/是quote- wordquote-like运算符

qw(realpath cwd)
Run Code Online (Sandbox Code Playgroud)

相当于

split(' ', q(realpath cwd))
Run Code Online (Sandbox Code Playgroud)

从而

'realpath', 'cwd'
Run Code Online (Sandbox Code Playgroud)

所以,

use Cwd qw(realpath cwd);
Run Code Online (Sandbox Code Playgroud)

相当于

use Cwd 'realpath', 'cwd';
Run Code Online (Sandbox Code Playgroud)

根据文档

use Module LIST;
Run Code Online (Sandbox Code Playgroud)

相当于

BEGIN {
   require Module;
   Module->import(LIST);
}
Run Code Online (Sandbox Code Playgroud)

所以

use Cwd 'realpath', 'cwd';
Run Code Online (Sandbox Code Playgroud)

相当于

BEGIN {
   require Cwd;
   Cwd->import('realpath', 'cwd');
}
Run Code Online (Sandbox Code Playgroud)

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

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

use Cwd qw(realpath cwd);
Run Code Online (Sandbox Code Playgroud)

最后,

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

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

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

最后,require执行指定的文件。(虽然require这不是正确的工具。)

代码的更简单版本:

use FindBin qw( $RealBin );
require("$RealBin/some_file.pl");
Run Code Online (Sandbox Code Playgroud)