我好奇.大多数Perl隐式调用的子例程必须以全部大写字母命名.TIESCALAR,DESTROY等实际上perldoc perltoot说
如果构造函数可以有任意名称,那么为什么不使用析构函数呢?因为虽然显式调用了构造函数,但析构函数不是.破坏通过Perl的垃圾收集(GC)系统自动发生,这是一个快速但有些懒惰的基于参考的GC系统.要知道要调用什么,Perl坚持将析构函数命名为DESTROY.Perl关于调用析构函数的正确时间的概念目前还没有明确定义,这就是为什么你的析构函数在被调用时不应该依赖它们的原因.
为什么DESTROY全部上限?Perl有时会使用纯大写的函数名作为约定来表示Perl会以某种方式自动调用该函数.隐式调用的其他函数包括BEGIN,END,AUTOLOAD,以及perltie中描述的绑定对象使用的所有方法.
那么为什么import子程序是小写的呢?有没有人对此有很好的了解?
我是网络编码的新手,最近一直在玩JQuery.我注意到了一些行为,并想知道它是否是正常行为以及处理它的最佳方法.
我正在做一个简单的访问我的Web服务器,有时服务器可能需要几分钟才能返回其结果.我注意到我的服务器端代码被多次调用,在这种情况下'/ userprofile'最多可以被调用3次.
("li#user").click(function(){
$.get('/userprofile',{partialrender: 'true' },
function (data) {
$("div#content").html(data);
});
});
Run Code Online (Sandbox Code Playgroud)
所以我的问题是;
1)这是正常行为吗?2)如果是这样JQuery进行额外的调用或浏览器?3)有什么好方法可以解决这个问题?
我很欣赏问题3的答案可能很难,但是非常感谢任何帮助.
非常感谢.
更新:
多谢你们,
好吧所以我不能用那个确切的调用产生问题,因为后端数据库很小但我可以用另一个相同的调用.我在get之前发出了一个警报,只调用一次.我正在使用Mojolicious webframework,所以我想知道它是否可以与之相关?我正在使用Morbo Web服务器.
这是我的代码,表现出这种行为
("li#importDevice").click(function(){
alert('import clicked');
$.get('/importDevice',{device: 'corptest' },
function (data) {
$("div#content").html(data);
});
})
sub importDevice {
my $self = shift;
my $res = "test";
my $dir = $self->session("dir");
my ($debug, $log, $path, $upload) = createLogHandles($self);
my %deviceEntry = device::getDeviceEntry($devicename);
print "In Import Device \n";
return $self->redirect_to('failed') unless $self->session('role') eq 'admin';
my %sessiondetails = utils::buildSessionDetails(%deviceEntry);
#THE FUNCTION BELOW IS …Run Code Online (Sandbox Code Playgroud) 我知道我冒险提出一个推测性的问题,但是,受到这个最近的问题的启发,我想知道哪个编辑器在语法高亮Perl方面做得最好.很清楚解析Perl的困难(不可能)我知道不会有一个完美的案例.我仍然怀疑在忠实代表中是否有明确的领导者.
NB我用gedit,它工作正常,但已知问题.
我一直在阅读一些perl513*delta文件,我看到了Perl 5.14的一些新功能.从Perl 5.13.7开始,许多数组/散列函数也适用于数组/散列引用.虽然这可能主要被视为语法糖,或者Perl正在做你期望的事情,但我想,这会改变在Perl中声明数据结构的范式吗?众所周知,它破坏了与预告片Perl的兼容性,主要使用匿名结构的争论是什么?
例如:
#!/usr/bin/env perl
use strict;
use warnings;
use 5.13.7;
my $hashref = {
english => 'hello',
spanish => 'hola',
french => 'bon jour'
};
foreach my $greeting (keys $hashref) {
say $hashref->{$greeting}; #use say since we need a later version anyway
}
Run Code Online (Sandbox Code Playgroud)
而不是使用命名hash(%hash)的更传统的方式.
PS如果看到它是增强的我可以改为CW,但我很想听到一些观点.
我正在尝试将C库包装到Perl中.我已经修改XS但是没有成功我认为我应该简单地开始Inline::C.我的问题是关于致死.我一直在尽力阅读perlguts,但我仍然感到困惑.sv_2mortal如果我没有把它推到堆栈上,我是否需要调用要返回的SV*?
(PS我真的正在研究一种不太有功能的C知识,它伤害了我.我有一个知道C帮助我的朋友,但他不知道任何Perl).
我在下面提供一个样本.该函数FLIGetLibVersion只是将len库版本的字符放在char*上ver.我的问题是version_return我的C代码泄漏内存的形式?
注意,欢迎对此代码提出任何其他意见.
#!/usr/bin/perl
use strict;
use warnings;
use 5.10.1;
use Inline (
C => 'DATA',
LIBS => '-lm -lfli',
FORCE_BUILD => 1,
);
say version_stack();
say version_return();
__DATA__
__C__
#include <stdio.h>
#include "libfli.h"
void version_stack() {
Inline_Stack_Vars;
Inline_Stack_Reset;
size_t len = 50;
char ver[len];
FLIGetLibVersion(ver, len);
Inline_Stack_Push(sv_2mortal(newSVpv(ver,strlen(ver))));
Inline_Stack_Done;
}
SV* version_return() {
size_t len = 50;
char ver[len];
FLIGetLibVersion(ver, len);
SV* ret = newSVpv(ver, …Run Code Online (Sandbox Code Playgroud) 在试图处理C级的参考时,我似乎无法弄清楚newRV_inc和之间的差异(在实践中)newRV_noinc.为此,我嘲笑了这个小Inline::C例子.
#!/usr/bin/env perl
use strict;
use warnings;
use Devel::Peek 'SvREFCNT';
my $arrayref_inc = make_arrayref_inc();
print "inc: ", SvREFCNT($arrayref_inc), "\n";
my $arrayref_noinc = make_arrayref_noinc();
print "noinc: ", SvREFCNT($arrayref_noinc), "\n";
use Inline C => <<'END_C';
SV* make_arrayref_inc () {
AV * array = newAV();
SV * arrayref = newRV_inc((SV *)array);
return arrayref;
}
SV* make_arrayref_noinc () {
AV * array = newAV();
SV * arrayref = newRV_noinc((SV *)array);
return arrayref;
}
END_C
Run Code Online (Sandbox Code Playgroud)
得到:
inc: 1
noinc: …Run Code Online (Sandbox Code Playgroud) 我试图学习Devel::Declare,以尝试重新实现像PDL::NiceSlice没有源过滤器的东西.当我注意到它正在从我的脚本中删除下一行时,我正在某个地方.为了说明我已经做了这个最小的例子,其中一个人可以使用comment关键字从代码中删除整行,允许编译,即使该行上有大量的字.
#Comment.pm
package Comment;
use strict;
use warnings;
use Devel::Declare ();
sub import {
my $class = shift;
my $caller = caller;
Devel::Declare->setup_for(
$caller,
{ comment => { const => \&parser } }
);
no strict 'refs';
*{$caller.'::comment'} = sub {};
}
sub parser {
#my $linestr = Devel::Declare::get_linestr;
#print $linestr;
Devel::Declare::set_linestr("");
}
1
Run Code Online (Sandbox Code Playgroud)
和
#!/usr/bin/env perl
#test.pl
use strict;
use warnings;
use Comment;
comment stuff;
print "Print 1\n";
print "Print 2\n";
Run Code Online (Sandbox Code Playgroud)
只收益率
Print …Run Code Online (Sandbox Code Playgroud) 我目前正在使用ActiveState Perl 5.14和R项目版本2.13.2.在Perl中我使用Statistics :: R版本0.08.根据ActiveState的说法,最近的版本Statistics::R(通过0.24)未能通过审查,因此无法通过PPM获得.
历史:我已成功使用Perl访问R一段时间来执行分析.现在我想生成分析结果的JPEG图像,以便于可视化.
问题在于:我可以在R控制台中成功生成图像.但是,当我通过Perl运行相同的命令时,我只得到一个空白图像.我的控制台代码包括(当然简化):
x<-c(1,2,3,4,5)
y<-c(5,4,3,2,1)
jpeg("C:/temp.jpg")
plot(x,y)
dev.off()
Run Code Online (Sandbox Code Playgroud)
我的Perl命令包括(也简化):
$R = Statistics::R->new();
$R->start_sharedR
$R->send("x<-c(1,2,3,4,5)");
$R->send("y<-c(5,4,3,2,1)");
$R->send('jpeg("C:/temp.jpg")');
$R->send("plot(x,y)");
$R->send("dev.off()");
Run Code Online (Sandbox Code Playgroud)
有什么建议?我知道Perl还有其他可以使用的绘图选项.我已经删除了一些(GD Graph),因为X轴数据不被视为数字.如果可能的话,我宁愿把它保留在R中,因为我已经在那个包中进行分析了.谢谢!
在编写Galileo时,我在模板(.html.ep)中添加了一些逻辑,仅此而已。为此,我想知道是否可以将这些文件包括在测试覆盖率分析中。
我尝试过一些东西,最有前途的是
HARNESS_PERL_SWITCHES='-MDevel::Cover=+select,\.ep$' prove -l t && cover
Run Code Online (Sandbox Code Playgroud)
但是这些文件仍未包括在内。也许这不可能,但也许有人有一些想法。
在一个Mojolicious应用程序中,我正在尝试在单击链接时将ODT文件转换为HTML.我使用shell命令"soffice"转换文件.转换文件需要一些时间.我向用户发送状态消息以通知他进度.我通过写入Mojo :: Log对象发送这些状态更新消息.然后,我在EventSource路由中订阅此日志对象.
然后我遍历文件并使用AnyEvent :: Util run_cmd来执行外部"soffice"程序.
for my $file (@{ $filelist }) {
my $output_dir = './output_dir';
my $cmd = "soffice --headless --convert-to html --outdir '$output_dir' '$file'";
my $cv = AnyEvent->condvar;
my $w;
$w = run_cmd($cmd,
'>' => sub { my $out = shift;
&WriteToLog({ status => "cmd output '$out'..." });
undef $w;
$cv->send;
},
'2>' => sub { my $err = shift;
&WriteToLog({ status => "ERROR '$err'..." });
undef $w;
$cv->send;
}
);
$cv->recv;
}
Run Code Online (Sandbox Code Playgroud)
几乎从主要的AnyEvent教程中复制和粘贴.如果只有很少的文件要转换(大约2或3),那么一切顺利.通过EventSource连接发送的状态消息显示在客户端浏览器上.然后在转换完所有文件后,将呈现网页.
如果要处理更多文件,则会转换一些文件,然后会出现线程标题中的错误消息.
包含上述代码的路由的路由是: …
perl ×10
mojolicious ×3
anyevent ×1
asynchronous ×1
c ×1
declare ×1
editor ×1
implicit ×1
inline ×1
jquery ×1
memory-leaks ×1
perlguts ×1
r ×1
reference ×1