我刚刚编写了我的第一个Perl模块,并且无法使用我生成的脚本.以下是我尝试运行使用新创建的模块的脚本时Perl解释器显示的错误.
错误信息:
scraper_tools_v1.pm did not return a true value at getYid.pl line 5.
BEGIN failed--compilation aborted at getYid.pl line 5.
Run Code Online (Sandbox Code Playgroud)
scraper_tools_v1.pm是我编写的Perl模块,getYid.pl是试图利用scraper_tools_v1.pm模块的Perl脚本.
以下是scraper_tools_v1.pm文件的代码:
#!/usr/bin/perl
package scraper_tools_v1;
use strict;
use warnings;
use WWW::Curl::Easy;
# Note this function expects a single parameter which should be in the form of a URL
sub getWebPage($)
{
# Setting up the Curl parameters
my $curl = WWW::Curl::Easy->new; # create a variable to store the curl object
# A parameter set to 1 tells the library to …Run Code Online (Sandbox Code Playgroud) 我在Perl中编写一个需要每晚同时运行的脚本,除非有时需要更改.我在CPAN上找到了Schedule :: Cron,它完成了我想要它做的事情.根据run方法的文档,
nofork => 1
启动调度程序时不要分叉.相反,作业在当前进程中执行.在执行的作业中,您可以完全访问脚本的全局变量,因此可能会影响在不同时间运行的其他作业.
这是我想做的,但它没有做.每当我检查全局变量的内存位置时,它们都是相同的,但是当任务开始时,该值不会更改.
我在Windows和Linux上都运行了这个,我让其他人查看代码,看看我的逻辑是否正确.我需要做些什么来保持对全局变量的更改.
use warnings;
use strict;
use Schedule::Cron;
use Time::localtime;
use constant {
EVERY_DAY_10PM => '* * * * * 4,16,28,40,52',
EVERY_DAY_NOON => '* * * * * 0,12,24,36,48',
EVERY_DAY_2AM => '* * * * * 7,19,31,43,55'
};
############GLOBAL VARIABLES############
our $cron = new Schedule::Cron(\&runUpdate);
our $cronId;
our $updateTimeDirty = 0;
############END GLOBAL VARIABLES############
############MAIN PROGRAM BODY############
$cronId = $cron->add_entry(EVERY_DAY_10PM);#defaults to \&runUpdate
$cron->add_entry(EVERY_DAY_NOON, \&changeTime);
$cron->run(no_fork => 1);
############END MAIN PROGRAM BODY############ …Run Code Online (Sandbox Code Playgroud) 我很难理解是什么Storable.
我知道它将一个变量"存储"到你的磁盘中,但为什么我需要这样做呢?我将使用此模块,我将如何操作?
我正在使用与os x lion捆绑在一起的默认perl发行版(版本5.12.3).当我在带有-W模块的脚本中使用模块Archive :: Extract时,它会发出以下警告:
Subroutine version::declare redefined at /Library/Perl/5.12/darwin-thread-multi-2level/version.pm line 139.
Subroutine version::qv redefined at /Library/Perl/5.12/darwin-thread-multi-2level/version.pm line 140.
Subroutine version::vcmp redefined at /Library/Perl/5.12/darwin-thread-multi-2level/version.pm line 142.
Subroutine version::stringify redefined at /Library/Perl/5.12/darwin-thread-multi-2level/version.pm line 145.
Subroutine version::("" redefined at /Library/Perl/5.12/darwin-thread-multi-2level/version.pm line 146.
Subroutine version::new redefined at /Library/Perl/5.12/darwin-thread-multi-2level/version.pm line 147.
Subroutine version::parse redefined at /Library/Perl/5.12/darwin-thread-multi-2level/version.pm line 148.
Subroutine UNIVERSAL::VERSION redefined at /Library/Perl/5.12/darwin-thread-multi-2level/version.pm line 194.
Name "IPC::Cmd::I18N::en::Lexicon" used only once: possible typo at /Library/Perl/Updates/5.12.3/Locale/Maketext.p\
m line 444.
Name "Archive::Extract::I18N::en::Lexicon" used only once: possible typo …Run Code Online (Sandbox Code Playgroud) 怀疑perl基础知识 use
它有点类似于我的其他问题Perl:同一文件中的两个包...
考虑一个perl脚本:
Script.pl
use INCLUDES;
Run Code Online (Sandbox Code Playgroud)
INCLUDES.pm
package INCLUDES;
use Exporter;
############# MY DOUBT STARTS HERE ###############
use Module1;
use Module2;
##################################################
our @ISA = qw(Exporter);
our @EXPORT = qw();
sub import {
print 'INCLUDES imported to ' . caller . "\n";
}
Run Code Online (Sandbox Code Playgroud)
Module1.pm
package Module1;
use strict;
use Exporter;
use INCLUDES; #####=> INCLUDES.pm 'use'd
our @ISA = qw(Exporter);
our @EXPORT = qw();
1;
Run Code Online (Sandbox Code Playgroud)
Module2.pm
package Module2;
use strict;
use Exporter;
use INCLUDES; #####=> INCLUDES.pm 'use'd
our @ISA …Run Code Online (Sandbox Code Playgroud) 我尝试使用来自App :: Fatpacker模块的fatpack实用程序来胖我的Perl脚本(在运行Perl 5.20的CentOS 6.6 64位上).我的脚本使用Log :: Log4perl模块进行日志记录.fatpack实用程序抱怨记录模块:
fatpack trace collect_genomes_to_database.pl
collect_genomes_to_database.pl syntax OK
fatpack packlists-for `cat fatpacker.trace` >packlists
Can't locate object method "new" via package "Log::Log4perl::Appender" at ~/perl5/lib/perl5/Log/Log4perl/Logger.pm line 33.
Compilation failed in require at ~/perl5/lib/perl5/Log/Log4perl/Config.pm line 8.
BEGIN failed--compilation aborted at ~/perl5/lib/perl5/Log/Log4perl/Config.pm line 8.
Compilation failed in require at ~/perl5/lib/perl5/Log/Log4perl/Appender.pm line 9.
BEGIN failed--compilation aborted at ~/perl5/lib/perl5/Log/Log4perl/Appender.pm line 9.
Compilation failed in require at ~/perl5/lib/perl5/App/FatPacker.pm line 149.
BEGIN failed--compilation aborted at ~/perl5/bin/fatpack line 3.
Run Code Online (Sandbox Code Playgroud)
有人成功打包包含Log :: Log4perl的脚本还是不可行?
你能建议一些制作自包含脚本的方法吗?
我使用Perl 5.16与REST::ClientGET进行REST调用,但它显示错误401身份验证问题.我不清楚如何解决这个问题.
码
use REST::Client;
use JSON;
use Data::Dumper;
use MIME::Base64;
my $username = 'test';
my $password = 'test';
my $client = REST::Client->new();
$client->setHost('http://myurl');
my $headers = {
Accept => 'application/json',
Authorization => 'Full' . encode_base64($username . ':' . $password)
};
$client->GET('folder/file', $headers);
print $client->responseCode();
print $client->responseContent();
Run Code Online (Sandbox Code Playgroud) 我有一个Perl程序和包Worker和Log.
Worker几乎完成所有计算,我想通过引用Worker子例程以及一些其他参数(标量和数组)来传递一个对象.我曾见过这样的例子这个和这个.
他们通过放入子@_,然后操纵对象来处理这个问题.我也找到了一种通过使用索引来操纵它们的方法,比如@{$_[i]}.问题是,当我尝试这样的代码时,我收到一个错误:
Can't call method "write" on unblessed reference at ...
代码片段如下.
主要:
use strict;
use warnings;
use Log;
use Worker;
my $log = Log->new();
my $worker = Worker->new();
my $scalar = "SomeURLhere";
my @array = ('red','blue','white');
# I do some stuff with $log object
#...
# Now I want to pass data to the Worker
$worker->subFromWorker($scalar, \$log, \@array);
Run Code Online (Sandbox Code Playgroud)
use strict;
use warnings;
package Worker;
sub …Run Code Online (Sandbox Code Playgroud) 我想在Ubuntu中一次安装所有可用的perl模块.这样的事情可能吗?
我正在努力HTML::TokeParser
解析包含日文字符的HTML文档.
这是我的代码:
use utf8;
use Encode qw(decode encode is_utf8);
use Encode::Guess;
use Data::Dumper;
use LWP::UserAgent;
use HTTP::Cookies;
use Cwd;
use HTML::TokeParser;
my $local_dir = getcwd;
my $browser = LWP::UserAgent->new();
my $cookie_jar = HTTP::Cookies->new(
file => $local_dir . "/cookies.lwp",
autosave => 1,
);
$browser->cookie_jar( $cookie_jar );
push @{ $browser->requests_redirectable }, 'POST';
$browser->requests_redirectable;
my $response = $browser->get("http://www.yahoo.co.jp/");
my $html = $response->content;
print $html;
utf8::decode($html);
my $p = HTML::TokeParser->new( \$html );
# dispatch table with subs to handle the different types …Run Code Online (Sandbox Code Playgroud)