问题标签 [perl-module]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
4 回答
1223 浏览

perl - 有没有更好的方法在 Perl 中通过引用传递?

我正在做这样的传递引用:

有更清洁的方法吗?

原型不起作用,因为我使用的是函数引用(相信我,使用函数引用是有充分理由的)。

我也不想在$_[0]任何地方使用,repl因为它很丑。

0 投票
3 回答
488 浏览

perl - 如何使用来自 beta Perl 脚本的 beta Perl 模块?

如果我的 Perl 代码有一个生产代码位置和“beta”代码位置(例如生产 Perl 代码我们在/usr/code/scripts,BETA Perl 代码在/usr/code/beta/scripts;生产 Perl 库在/usr/code/lib/perl并且这些库的 BETA 版本在/usr/code/beta/lib/perl,对我来说有一个简单的方法吗?实现这样的设置?

确切的要求是:

  • 该代码在生产和 BETA 位置中必须相同。

    澄清一下,要将任何代码(库或脚本)从 BETA 升级到生产,唯一需要发生的事情就是cp从 BETA 向 prod 位置发出命令——文件名和文件内容都必须保持相同

  • BETA 版本的脚本必须调用其他 BETA 脚本和 BETA 库(如果存在)或生产库(如果 BETA 库不存在)

  • BETA 和生产环境之间的代码路径必须相同,但基目录 ( /usr/code/vs /usr/code/beta/) 除外

  • 脚本必须全部位于同一个基目录下,但它们可能位于任意深度级别的子目录中(这排除了use lib "$FindBin::Bin/../lib"第 31.13 节中的经典解决方案。使用"Programming Perl"lib

我将介绍我们如何解决这个问题作为这个问题的答案,但我想知道是否有更好的方法。

0 投票
1 回答
199 浏览

perl - 如何在生产 Web 服务器上测试 Apache/mod_perl 下的 Web Perl 模块?

我们有一个设置,其中大多数代码在升级到全面生产之前以 BETA 模式部署 - 这意味着它在完整的生产环境中运行(使用生产数据库 - 通常是生产数据;和生产 Web 服务器)。我们称该阶段为 BETA 测试。

主要要求之一是 BETA 代码升级到生产必须是从 beta 到生产目录的简单“cp”命令 - 没有代码/文件名更改。

对于非 Web Perl 代码,实现无缝 BETA 测试是完全可行的(详见此处):

  • Perl 程序位于生产根目录 ( /usr/code/scripts) 下的标准位置,生产 perl 模块位于同一根目录 ( /usr/code/lib/perl)
  • BETA 代码具有 100% 相同的代码路径,除了 beta 根 ( /usr/code/beta/)
  • 一个特殊的模块@INC根据脚本是从/usr/code/scripts或调用来操作任何脚本/usr/code/test/scripts,以包含用于 beta 脚本的 beta 库。

在我们需要对我们的 Web Perl 代码进行 beta 测试之前,此设置工作正常(设置是 EmbPerl 和 Apache/mod_perl)。

问题如下:如果生产 Perl 模块和 BETA Perl 模块具有相同的名称(例如/usr/code/lib/perl/MyLib1.pm/usr/code/beta/lib/perl/MyLib1.pm),那么 mod_perl 将只能将其中一个模块加载到内存中- 我们无法意识到由于并发问题,特定网页会影响当前加载的模块版本。

抛开明显的非编程解决方案(获得一个血腥的 BETA web 服务器),出于政治/组织原因是不可行的,有什么方法可以在 Perl 或 mod_perl 中以某种方式解决这个问题?

我尝试了各种方法来卸载%INC已列出的 Perl 模块,但问题仍然是另一个用户可能会在正确(或相当错误)的时刻加载 beta 页面并加载 beta 模块,该模块将用于我的生产页面.

0 投票
3 回答
16012 浏览

perl - Perl 程序如何知道在哪里可以找到包含它使用的 Perl 模块的文件?

如果我的 Perl 程序使用 Perl 模块,它将如何确定在哪里可以找到包含模块代码的文件?

例如,如果程序包含:

它会在哪里看?

0 投票
3 回答
152759 浏览

perl - How is Perl's @INC constructed? (aka What are all the ways of affecting where Perl modules are searched for?)

What are all the ways of affecting where Perl modules are searched for? or, How is Perl's @INC constructed?

As we know, Perl uses @INC array containing directory names to determine where to search for Perl module files.

There does not seem to be a comprehensive "@INC" FAQ-type post on StackOverflow, so this question is intended as one.

0 投票
4 回答
203 浏览

perl - 用于 Perl Web 开发的 ASP 样式标签?

问这个问题,我感觉就像回到了 10 年前,但是......

是否有任何模块、补丁或任何“新”版本的 Perl(在过去 10 年中发布)来支持使用 ASP 样式标签编写面向 Web 的 Perl 脚本?

例如来自 ASP/JSP

例如来自 PHP

请不要担心“为什么”我要问这个......它与编程语言研究有关。

0 投票
5 回答
14778 浏览

perl - 如何使用 perl 与用户和 SSL Auth 进行 SMTP 连接并发送带有附件的电子邮件

我正在使用一个 SMTP 邮件服务器,它需要用户 + ssl 身份验证才能进行连接。我正在寻找 perl 模块来连接到邮件服务器并发送电子邮件,但没有发现任何有用的东西。

对 perl 模块或任何 perl 代码的任何建议将不胜感激。

编辑

我尝试使用 Mail::Sendmail 和 Net::SMTP::SSL 连接到 sendmail 服务器并发送邮件。以下是示例代码,但出现错误用户未知。

错误:

代码:

0 投票
3 回答
3259 浏览

bash - 如何检查 Perl 的可用性、版本和所需模块的存在?

我写了一个 Perl 脚本,我只是想把它发给每个人,因为我打算写一个 bash 脚本,用于测试用户的环境,并确定该环境是否能够运行 Perl 脚本。

我想测试以下内容:

  1. Perl 是否已安装在该系统中
  2. Perl 应该有版本 5 或更高版本
  3. 模块 JSON::Any 是否可用

任何建议将不胜感激:-)

0 投票
1 回答
1175 浏览

perl - 为什么 CPAN 不为我的包中的模块安装依赖项?

我正在创建一个捆绑包,以便轻松安装我的应用程序。我从这里开始:http ://search.cpan.org/dist/CPAN/lib/CPAN.pm#Bundles

我有一个包 Bundle::MyApp ,它看起来像这样:

我在我的本地机器上测试它,所以我把包放到我的 cpan 文件夹中,例如:~/.cpan/Bundle/MyApp.pm

现在我可以使用它运行它cpan install Bundle::MyApp并且它可以工作,只是它没有安装我列出的模块所需的依赖项。所以在这个例子中,cpan 首先尝试安装 DateTime 但安装失败,因为首先需要 DateTime::Locale,然后它尝试安装 Image::Size 并且由于需要 deps 而失败。

如果我直接通过 cpan 安装 DateTime 模块,则使用cpan install DateTime它可以正常工作并安装依赖项。

所以我正在寻找一种方法来告诉 CPAN 在从我的包安装时遵循依赖关系。我的包裹里有什么需要放的吗?还是我的用户帐户的 CPAN 配置有问题?

0 投票
4 回答
875 浏览

perl - 我应该如何组织许多 Perl 模块?

假设我在 12 个目录中有 100 个 Perl 模块。但是,查看主要的 Perl 脚本,它看起来像 100use p1 ; use p2 ;等。解决这个问题的最佳方法是什么?