【问题标题】:How to include a file that contains all the required Perl module names?如何包含一个包含所有必需 Perl 模块名称的文件?
【发布时间】:2012-11-15 07:30:57
【问题描述】:

perl 脚本包含脚本开头的所有模块名称。

例如:

use strict;
use XML::Parser;
use XML::Simple;
use DBI;
use DBD::DB2::Constants;
use POSIX qw( strftime );
use Storable qw(dclone);
use Data::Dumper;
use Carp;

如何将所有模块名称保存在另一个文件中并将该文件包含在主 perl 脚本中?

谢谢。

【问题讨论】:

标签: perl perl-module


【解决方案1】:

你可以使用

BEGIN { do 'filename.pl' or die $@ }

do。请务必在文件底部包含1;

【讨论】:

  • 它不会开启 strict,但会处理 exporter。
【解决方案2】:

创建您自己的模块。但是,如果你在这个模块中制作包,那些strftime 等将被导入另一个命名空间。你可以做一些小技巧来做这个微笑:

MyModules.pm:

use strict;
use XML::Parser;
use XML::Simple;
use DBI;
use DBD::DB2::Constants;
use POSIX qw( strftime );
use Storable qw(dclone);
use Data::Dumper;
use Carp;

请注意,此 .pm 中没有 package 关键字。你的脚本:

use MyModules;

将此 .pm 放入与脚本相同的目录或在运行时添加模块搜索路径:

use lib '/my_modules_dir/';
use MyModules;

不推荐使用 dorequire 命令,因为它们不会在脚本启动时检查语法。当然你可以将它们放入 BEGIN 块,但我认为它的方式很棘手,一般BEGIN{ require ..}use 相同

UPD:ikegami 注意到当您从许多模块中使用它时它无法正常工作的问题。不管问题启动者的信息(他想从主脚本中使用它),我都会从许多模块中添加如何使用它的信息,这样我的朋友会感觉更好。添加到 MyModules.pm 的末尾:

delete $INC{'MyModules.pm'};
1;

【讨论】:

  • 实际上use,当文件不包含包时,BEGIN 无论如何都以do 结尾。 use 将为您进行检查的区别。而且,与 choroba 的答案一样,您将使用 do 命令之类的简单内容编辑评论/捕获错误。
  • @ikegami 是的,use 将导致 require 在检查模块尚未加载后,它本身将调用 do。他想包含在主脚本中。
  • @ikegami 为您服务,我最好的 stackoverflow 朋友。
  • .@ PSIAlt:非常感谢。为什么要使用语句。删除 $INC{'MyModules.pm'};
  • @Sourcecode 通常是因为它是 hack。但具有讽刺意味的是 Perl 有 1/4 是由 hacks 组成的 xD
【解决方案3】:

您可以查看Toolkit 模块。

【讨论】:

    猜你喜欢
    • 2021-04-24
    • 1970-01-01
    • 2016-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-13
    • 1970-01-01
    相关资源
    最近更新 更多