perl - 这个 Perl 代码有什么作用?

标签 perl include cpanel

在 cPanel 中,它们告诉您将此代码插入 Perl 文件的开头。我不确定它的作用。我已经在文件的开头尝试了有和没有这个的代码,它似乎都工作相同。我没有用 cron 运行代码来测试它,但只是作为我自己。通过“测试出来”,我的意思是使用打印行、数据库连接和返回、subs、vars 等......

BEGIN 
{
    my $base_module_dir = (-d '/home/root/perl' ? '/home/root/perl' : ( getpwuid($>) )[7] . '/perl/');
    unshift @INC, map { $base_module_dir . $_ } @INC;
}

最佳答案

它旨在设置您的模块搜索路径。具体来说,它设置默认位置(第一个检查位置)用户的本地 perl/目录。它不仅添加了那个目录,而且使它成为 @INC 的新根目录。 . 它对@INC 中的每个条目执行此操作。 在访问受限的环境中,例如使用 CPanel 的环境,这可以确保您的脚本(通用 cgi)使用您的模块而不是其他任何模块。

BEGIN 表示它出现在任何不在 block 中的代码之前。

第一行确定 /home/root/perl存在并且是一个目录。如果两者都为真,则将其分配给 $base_module_dir , 否则它分配 <user home>/perl/到变量。请记住,在 perl 中,如果函数调用返回列表,则可以直接对其进行索引。

它使用 getpwuid($>) 找到用户的主目录. getpwuid()获取给定用户的用户帐户信息(通常来自 Unix 系统上的 passwd)并将其作为列表返回。 $>是脚本的有效用户 ID。索引为 7 的原因是主目录在列表中的位置(如果有内存,它是 passwd 中的第 8 个字段)。

然后它将所有条目添加到 @INC 中。与 $base_module_dir并在 @INC 的前面插入那些修改过的条目.所以不仅仅是添加 $base_module_dir作为目录,但将其添加为 @INC 中所有条目的新根目录.这就是它使用 map 的原因。而不是仅仅添加一个条目。

关于perl - 这个 Perl 代码有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3567332/

相关文章:

c++ - 如何在 Visual Studio C++ 2005 中处理所有#include 指令?

linux - DNS 命名无法重新启动

perl - GD:建立DBI连接时,图形没有输出

html - IIS 405 用于访问此页面的 HTTP 动词不允许电子邮件

perl - glob 没有选择与模式匹配的所有文件,语法是否存在问题

Perl 哈希键由数组确定

c++ - 在多个 cpp 文件上使用类/结构/union C++

linux - name.d/(例如/etc/httpd/conf.d)目录有名称吗?

php - 如何在服务器上的phpmyadmin中上传一个大的sql文件

mysql - 如何访问您的/home/cpbackuptmp/cpbackup/daily文件夹cPanel