我喜欢Vista风格的路径,所以在XP机器上我创建了NTFS交汇点C:\Users- > C:\Documents and Settings和~\Documents- > ~\My Documents,所以我只需要写一种风格的路径C:\Users\me\Documents.
然而,CPAN::SQLite和出口商有一个毛茸茸的配合,当我设置PERL5LIB到'C:\Users\me\Documents\dev\perl\lib'.从开始抱怨的导出器模块在尝试使用时未定义.Exporterexport_to_level
我真的认为这是Exporter等,并且CPAN::SQLite仅仅是一个受害者,因为它进口的$dbh符号在使用的语句,只是有Perl抱怨$dbh没有定义.最重要的是,与XS相关的模块抱怨没有"bootstrap"方法.
那么,任何人都知道Perl(草莓)是否与NTFS Junction有特殊问题?
在试图处理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) Perl有一个规范的"真"和"假"值,它用于布尔否定的情况用!或not.
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Dumper;
print Dumper !1; # outputs $VAR1 = '';
print Dumper !!1; # outputs $VAR1 = 1;
Run Code Online (Sandbox Code Playgroud)
到目前为止都很好.
但是,当我看值与Devel::Peek很显然,他们并不等同于字面''和1,他们都是SV PVNV值.
$ perl -MDevel::Peek -E 'Dump ""; Dump !1;' 2>&1 | grep '^SV'
SV = PV(0x15e5140) at 0x1603298
SV = PVNV(0x15e3010) at 0x7814b0
$ perl -MDevel::Peek -E 'Dump 1; Dump !!1;' 2>&1 | grep '^SV'
SV = IV(0xfce228) at 0xfce238
SV = PVNV(0xfae030) …Run Code Online (Sandbox Code Playgroud) 根据Scalar :: Util的文档,refaddr工作方式如下:
Run Code Online (Sandbox Code Playgroud)my $addr = refaddr( $ref );如果引用$ ref,则引用值的内部存储器地址将作为普通整数返回.否则返回undef.
但是,这并不能告诉我是否$addr是永久性的.可以在refaddr一段时间内参考的变化?例如,在C中,运行realloc可以改变存储在动态存储器中的东西的位置.这与Perl 5类似吗?
我问,因为我想制作一个由内而外的对象,我想知道是否refaddr($object)能成为一把好钥匙.例如,在XS中编程时似乎最简单.