长时间听众,第一次来电.我知道这是一个有点模糊的问题,不要期望太多.:-)
我有以下Ada文件:
greeter.ads
package Greeter is
procedure Hello;
end Greeter;
Run Code Online (Sandbox Code Playgroud)
greeter.adb
with Ada.Text_IO; use Ada.Text_IO;
package body Greeter is
procedure Hello is
begin
Put_Line ("Hello, world!");
end Hello;
end Greeter;
Run Code Online (Sandbox Code Playgroud)
并将它们编译成这样的共享对象:
gnatmake -z -fPIC greeter.adb
gcc -shared -o libgreeter.so greeter.o
Run Code Online (Sandbox Code Playgroud)
编译好了.nm显示以下符号:
$ nm -D libgreeter.so
w _Jv_RegisterClasses
0000000000201028 A __bss_start
w __cxa_finalize
w __gmon_start__
U __gnat_eh_personality
0000000000201028 A _edata
0000000000201038 A _end
00000000000006a8 T _fini
0000000000000520 T _init
U ada__text_io__put_line__2
0000000000201018 D greeter_E
000000000000063c T greeter__hello
Run Code Online (Sandbox Code Playgroud)
现在我尝试在Perl中加载该共享对象:
#!/usr/bin/env …Run Code Online (Sandbox Code Playgroud) Moops通过以下构造增强了perl语法:
class MyPkg::MyClass {
# ...
}
Run Code Online (Sandbox Code Playgroud)
并增加了通过引入新关键字来声明成员函数签名的可能性,fun并且method:
class MyPkg::MyClass {
method run(ArrayRef $ar){
}
}
Run Code Online (Sandbox Code Playgroud)
我使用vim和tag文件来导航我的代码库,但这些新的关键字是未知的ctags,所以类,函数和方法都没有编入索引.我该如何改善这种情况?
我的Dancer app模块中有以下代码:
package Deadlands;
use Dancer ':syntax';
use Dice;
our $VERSION = '0.1';
get '/' => sub {
my ($dieQty, $dieType);
$dieQty = param('dieQty');
$dieType = param('dieType');
if (defined $dieQty && defined $dieType) {
return Dice->new(dieType => $dieType, dieQty => $dieQty)->getStandardResult();
}
template 'index';
};
true;
Run Code Online (Sandbox Code Playgroud)
我有一个名为Dice.pm的Moops类,如果用.pl文件测试它就可以正常工作,但是当我尝试通过Web浏览器访问它时,我收到以下错误:找不到对象方法"new"通过包"骰子"(也许你忘了加载"骰子"?).
我可以和Dancer一起做吗?
以下是Dice.pm的相关代码:
use 5.14.3;
use Moops;
class Dice 1.0 {
has dieType => (is => 'rw', isa => Int, required => 1);
has dieQty => (is => 'rw', isa => Int, …Run Code Online (Sandbox Code Playgroud) 我是一名 Perl 新手,正在开发一个相当长的模块,我想将其拆分为多个文件,以便于维护和组织。现在看起来像这样
#ABC.pm
package ABC;
use strict;
use warnings;
my $var1;
my $var2;
sub func1 {
#some operations on a $var
}
sub func2 {
#some operations on a $var
}
return 1;
Run Code Online (Sandbox Code Playgroud)
我希望它看起来像
#ABC_Part_1.pm
package ABC;
use strict;
use warnings;
my $var1;
my $var2;
sub func1 {
#some operations on a $var
}
return 1;
Run Code Online (Sandbox Code Playgroud)
#ABC_Part_2.pm
package ABC;
use strict;
use warnings;
sub func2 {
#some operations on a $var
}
return 1;
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是让变量在单独的文件中可见。我尝试使用“我们的”来声明它们,但随后我必须使用我不想做的范围解析运算符。我想将它们视为模块文件中的局部变量,但将它们隐藏到调用脚本中。我还想在调用脚本中只包含一个,例如
#!/usr/bin/env perl
#script.pl
use …Run Code Online (Sandbox Code Playgroud) 我的基于Moo的类具有惰性和非惰性属性,这两个属性都具有sub default和coercesubs.如果我没有初始化属性,我发现为普通属性调用了both default和coercesubs,但只default调用了lazy属性.这似乎不一致.这是示例代码:
package Foo;
use Moo;
has nrml => ( is => 'ro',
default => sub { print "nrml default\n" },
coerce => sub { print "nrml coerce\n" }
);
has lazy => ( is => 'ro',
lazy => 1,
default => sub { print "lazy default\n" },
coerce => sub { print "lazy coerce\n" }
);
my $q = Foo->new( );
$q->lazy;
Run Code Online (Sandbox Code Playgroud)
输出是:
nrml default
nrml coerce
lazy default
Run Code Online (Sandbox Code Playgroud)
coerce …