你怎么看待这两个?我开始读一本关于Catalyst的书,发现它与Dancer相比非常复杂.所以现在我正在试试舞者,它看起来更容易学习,更"人性化".
假设我从头开始一个项目,这不依赖于任何其他项目.我想使用一种格式来存储提要,比如XML,因为XML不是唯一可用的格式,我想知道:为什么我应该选择其中一种?
我将使用perl.
'Feed'是产品的描述(名称,价格,类型,简短描述,最多120个字).
我想抓取一个网站,问题是,它充满了JavaScript的东西,比如按钮等,当按下它们时,它们不会改变URL,但页面上的数据会发生变化.
通常我使用LWP/Mechanize等来抓取网站,但都不支持JavaScript.任何的想法?
我刚刚遇到一些非常奇怪的行为,我实在无法解释:
do {
my $qry = $self->getHTMLQuery(undef, $mech->content());
next if (!defined($qry));
push(
@prods,
map { 'http://www.XXXXYYYX.com'.$_->attr('href') }
$qry->query('div.prodInfo div.prodInfoBox a.prodLink.GridItemLink')
);
$qry->delete();
$TEST++;
last if ($TEST >= 10);
} while(eval { $mech->follow_link(class => 'jump next') });
print "WHILE ENDED\n";
Run Code Online (Sandbox Code Playgroud)
上面的代码永远不会打印"WHILE ENDED",即使它$TEST
> = 10 时似乎超出了while循环.
但是下面的代码确实打印了"WHILE ENDED":
do {
my $qry = $self->getHTMLQuery(undef, $mech->content());
next if (!defined($qry));
push(
@prods,
map { 'http://www.XXXXYYYX.com'.$_->attr('href') }
$qry->query('div.prodInfo div.prodInfoBox a.prodLink.GridItemLink')
);
$qry->delete();
$TEST++;
} while(eval { $mech->follow_link(class => 'jump next') } && $TEST …
Run Code Online (Sandbox Code Playgroud) 我现在写Perl很长一段时间了,总是发现新的东西,我只是碰到了一些有趣的东西,我没有解释它,也没有在网上找到它.
sub a {
sub b {
print "In B\n";
}
}
b();
Run Code Online (Sandbox Code Playgroud)
为什么我可以b()
从外部调用它并且它有效?
我知道这是一个不好的做法,我不这样做,我使用闭合等这些情况,但只是看到了.
如果没有匹配的案例块,有没有办法运行代码块?例如:
switch($a) {
case // {}
case // {}
...
# DO SOMETHING IF NONE OF THE ABOVE CASES WERE MATCHED
}
Run Code Online (Sandbox Code Playgroud)
else
不是我想要的,因为它只适用于最后一个案例块.
我有一个主窗口,其中有一个QWebView.我希望将某个网站(例如www.kdkdkkd.com)永久保留,因此每次用户关闭并重新打开浏览器时,他都不需要再次登录.
谢谢,
我已下载模块Digest::SHA1
并将其解压缩到目录(../Digest-SHA1-2.13/),然后将所有SHA1.*文件复制到(../Digest-SHA1-2.13/Digest)
在perl脚本中,我做了:使用Digest :: SHA1; 像这样启动脚本:
perl -I ../Digest-SHA1-2.13/Digest perlscriptname.pl
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Can't locate loadable object for module Digest::SHA1 in @INC
Run Code Online (Sandbox Code Playgroud)
我假设它与共享库(*.so)有关,我不知道如何从这里继续.
我可以使用CPAN(-MCPAN)模块直接安装它,因为我没有权限在该服务器上执行此操作,并且只能在本地安装(应用程序运行的地方).我的最终目标是使用Algorithm::CouponCode
哪个依赖于Digest::SHA1
奇怪的部分是,我已经Digest::SHA1
安装(perl -MDigest::SHA1 -e 'print $Digest::SHA1::VERSION'
显示版本2.11),仍然Algorithm::CouponCode
(安装方式与我做的相同Digest::SHA1
)抱怨它可以找到它@INC
谢谢!
到目前为止,如果我想将几个正则表达式和if语句组合在一起,我就是这样做的:
my $data =...
if ( $data =~ m/regex/ && $data =~ m/secondregex/ ) {...}
Run Code Online (Sandbox Code Playgroud)
是否有快捷方式(我确信有,它的Perl!)以避免重复$ data,例如:
if ( $data =~ m/regex/ && m/secondregex/ ) {..}
Run Code Online (Sandbox Code Playgroud)
??
谢谢,
我正在为一个网站编写一些抓取工具,我的想法是该网站将使用一些后端Perl脚本从其他网站获取数据,我的设计(以非常抽象的方式......)将是写的一个包,让我们说:
package MyApp::Crawler::SiteName
Run Code Online (Sandbox Code Playgroud)
其中站点名称将是用于爬网特定站点的模块/包,我显然将有其他包将在不同模块之间共享,但这里不相关.
无论如何,长短,我的问题是:为什么(或为什么不...)我应该更喜欢Moose而不是标准的OO Perl?
谢谢,
perl ×9
c++ ×1
case ×1
catalyst ×1
cookies ×1
dancer ×1
javascript ×1
json ×1
moose ×1
nested ×1
oop ×1
perl-module ×1
qt ×1
qwebview ×1
regex ×1
scope ×1
subroutine ×1
syntax ×1
web-crawler ×1
web-scraping ×1
webkit ×1
xml ×1
yaml ×1