标签: perl-module

我应该将utilities.pl更改为utilities.pm模块吗?

在我们的产品中,我们有一个很大的实用程序文件,我们需要(带do)在很多文件的开头.有没有理由把它变成一个模块?例如,而不是这样做:

do '../dbi_utilities.pl';
our ($db,$user,$pw,$attr);
my $Data = DBI->connect($db,$user,$pw,$attr) or die "Could not connect to database: $DBI::errstr";
Run Code Online (Sandbox Code Playgroud)

我不能这样做吗?:

use AppUtil;
my $Data = AppUtil->connect();
Run Code Online (Sandbox Code Playgroud)

perl perl-module

6
推荐指数
3
解决办法
285
查看次数

如何在Windows上的ActivePerl中安装模块及其依赖项?

我想使用gmail的smtp服务器和perl发送电子邮件.我正在尝试安装Email::Send::Gmail,但我不清楚安装它的步骤是什么.它似乎取决于我没有安装的其他模块.

perl module perl-module

6
推荐指数
2
解决办法
2543
查看次数

如何检查Perl的可用性,其版本和所需模块的存在?

我编写了一个Perl脚本,我只是想把它给每个人,因为我计划编写一个bash脚本,用于测试用户的环境并查找该环境是否能够运行Perl脚本.

我想测试一下这样的事情:

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

任何建议都会非常感激:-)

bash perl perl-module

6
推荐指数
3
解决办法
2955
查看次数

使用Perl创建包

制作我的第一个简单包(我实际上是我的第一个包期)似乎有很多麻烦.我正在做我应该做的一切(我想)但它仍然无法正常工作.这是包(我想你可以称之为模块):

package MyModule;

use strict;
use Exporter;
use vars qw($VERSION @ISA @EXPORT @EXPORT_OK %EXPORT_TAGS);

$VERSION     = 1.00;
@ISA         = qw(Exporter);
@EXPORT      = ();
@EXPORT_OK   = qw(func1 func2);
%EXPORT_TAGS = ( DEFAULT => [qw(&func1)],
             Both    => [qw(&func1 &func2)]);

sub func1  { return reverse @_  }
sub func2  { return map{ uc }@_ }

1;
Run Code Online (Sandbox Code Playgroud)

我将此模块保存为MyModule(是的,它保存为.pm文件)Perl/site/lib(这是我存储的所有非内置模块的地方).然后我尝试使用这个模块的Perl脚本:

use strict;
use warnings;

my @list = qw (J u s t ~ A n o t h e r ~ P e r …
Run Code Online (Sandbox Code Playgroud)

perl module packages perl-module package

6
推荐指数
1
解决办法
1516
查看次数

Perl Cygwin好玩.模块已加载,但程序未找到

好的一些规则:

  • 不,我不能在这个系统上安装Strawberry Perl.我必须使用Cygwin.
  • 这是Perl 5.8.7.我无法更新它.
  • 这不是我的系统.这是一个客户的系统,我不能修改它到我心中的内容.

现在,我们已经解决了这个问题......

我已经安装Spreadsheet::Read,Spreadsheet::ParseExcel以及Spreadsheet::XLSX在此系统上.这安装了一个名为的Perl脚本xlscat.我们之前在开发盒和UAT盒子上做过这个.现在这是生产箱.

我收到以下错误:

Parser for XLSX is not installed at /usr/bin/xlscat line 185
Run Code Online (Sandbox Code Playgroud)

我跟踪过这个Spreadsheet::Read.相关代码是:

my @parsers = (
    [ csv       => "Text::CSV_XS"               ],
    [ csv       => "Text::CSV_PP"               ], # Version 1.05 and up
    [ csv       => "Text::CSV"                  ], # Version 1.00 and up
    [ ods       => "Spreadsheet::ReadSXC"       ],
    [ sxc       => "Spreadsheet::ReadSXC"       ],
    [ xls       => "Spreadsheet::ParseExcel"    ],
    [ xlsx      => "Spreadsheet::XLSX"          ],
    [ …
Run Code Online (Sandbox Code Playgroud)

perl cygwin perl-module

6
推荐指数
1
解决办法
2497
查看次数

Text :: CSV perl模块中的is_quoted()方法

我可能会遗漏一些明显的东西,但我有一个非常简单的perl脚本,其中Text :: CSV模块中的is_quoted()方法没有按预期工作.这是代码:

# cat ./testcsv.pl
#!/usr/bin/perl

use strict;
use Text::CSV;

my $csv = Text::CSV->new ( { quote_char => '"' } )
        or die "Cannot use CSV: ".Text::CSV->error_diag ();

print "Text::CSV version = " . $csv->version() . "\n\n";

my $line = '"text field 111",222,"text field 333",444';

my $status  = $csv->parse($line);
if ($status)
  {
  my $column_idx = 0;
  my @fields = $csv->fields ();
  foreach my $field (@fields)
     {
     my $quoted = $csv->is_quoted ($column_idx);
     $column_idx++;
     print "field #$column_idx: '$field'; quoted = " …
Run Code Online (Sandbox Code Playgroud)

csv perl perl-module

6
推荐指数
1
解决办法
374
查看次数

如何从Nagios-Report Perl模块打印Nagios服务UP时间百分比

我可以使用以下代码从Nagios-Report Perl模块打印出Host UP Time百分比:

#!/usr/bin/perl
use strict ;
use Nagios::Report ;
my $x = Nagios::Report->new(q<local_cgi localhost nagiosadmin>)
  or die "Can't construct Nagios::Report object." ;
$x->mkreport(
                [ qw(HOST_NAME PERCENT_TOTAL_TIME_UP) ],

                sub {
                        my %F = @_; my $u = $F{PERCENT_TOTAL_TIME_UP}; $u =~ s/%//;
                    },
                        0,

                sub {
                        my $F = shift @_ ;
                }
) ;
$x->debug_dump ;
Run Code Online (Sandbox Code Playgroud)

但是,我怎样才能打印出服务时间百分比?我的意思是只输出百分比值.

我尝试了很多选择,但无法做到正确.

perl monitoring perl-module nagios

6
推荐指数
1
解决办法
1298
查看次数

什么是Perl中的@ISA?

如果我有一个有方法的模块a,并b与要导出他们我做的:

use Exporter;  
our @ISA = qw (Exporter);  
our @EXPORT = qw (a b);  
Run Code Online (Sandbox Code Playgroud)

我不明白的是这一行:
our @ISA = qw (Exporter);做什么?

perl perl-module

6
推荐指数
3
解决办法
7104
查看次数

仅通过加载模块的一部分来节省资源?

我正在阅读O'Reilly的Perl对象,参考和模块,更具体地说是关于模块的部分.它声明在使用时use Some::Module您可以指定导入列表.从它的解释看来,使用这个列表的唯一好处是为了保持命名空间的清洁.换句话说,如果包中有子程序some_sub,main并且加载的模块有一个同名的子程序,则子程序将被覆盖.但是,如果您指定导入列表some_sub从此列表中省略,则不会发生此冲突.然后,您可以仍然some_sub从模块通过声明它像这样运行:Some::Module::some_sub.

除了上面描述的那个之外还有其他好处吗?我问这个是因为在某些情况下你加载了具有大量功能的模块,即使你只对它的一些方法感兴趣.起初我认为通过指定一个导入列表,你只加载那些方法,而不是用你不会使用的方法来膨胀内存.但是,从上面的解释看来并非如此.您是否可以通过仅加载模块的部分来有选择地节省资源?或者Perl是否足够智能,在编译时无需程序员干预?

perl perl-module

6
推荐指数
2
解决办法
128
查看次数

Regexp :: Debugger Perl模块似乎不能在另一个Perl模块中工作

我正在编写一个Perl模块,它涉及一些非常复杂的正则表达式,如果没有工具来帮助我几乎无法调试.我认为该Regexp::Debugger模块将是完成该工作的完美工具,但它似乎只能在.pl脚本中工作,并且似乎不能在.pm模块中工作.


例如,这有效:

test.pl

use strict;
use warnings;
use Regexp::Debugger;

my $text = "text";
if ($text =~ /tex/) {
    print "Match!";
}
Run Code Online (Sandbox Code Playgroud)

我得到了预期的调试功能.


但第二个我介绍了一个Perl模块,它不再起作用:

test.pl

use strict;
use warnings;
use TestModule;

TestModule::func();
Run Code Online (Sandbox Code Playgroud)

TestModule.pm

package TestModule;

use strict;
use warnings;
use Regexp::Debugger;

sub func {
    my $text = "text";
    if ($text =~ /tex/) {
        print "Match!";
    }
}

1;
Run Code Online (Sandbox Code Playgroud)

尝试运行此代码会出现以下错误:

不能在Regexp/Debugger.pm第160行使用未定义的值作为HASH参考

简单地包含Regexp::Debugger在"test.pl"文件中也不起作用,因为它不会尝试在包含的模块中调试正则表达式.

我怎样才能使这个工作,所以我可以调试我正在工作的模块中的正则表达式?


更新:

已提交错误报告,现在CPAN上的新版本(v0.002001)可按预期工作.:)

regex debugging perl perl-module

6
推荐指数
1
解决办法
100
查看次数

标签 统计

perl ×10

perl-module ×10

module ×2

bash ×1

csv ×1

cygwin ×1

debugging ×1

monitoring ×1

nagios ×1

package ×1

packages ×1

regex ×1