标签: perlguts

Perl的哪个部分不喜欢NTFS Junctions?

我喜欢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有特殊问题?

perl ntfs strawberry-perl perlguts

6
推荐指数
1
解决办法
324
查看次数

了解newRV_inc vs newRV_noinc

在试图处理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 perlguts

5
推荐指数
1
解决办法
490
查看次数

为什么Perl的规范"真实"和"虚假"价值PVNV内部?

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)

perl perlguts

3
推荐指数
1
解决办法
164
查看次数

refaddr返回的值是永久的吗?

根据Scalar :: Util的文档,refaddr工作方式如下:

my $addr = refaddr( $ref );
Run Code Online (Sandbox Code Playgroud)

如果引用$ ref,则引用值的内部存储器地址将作为普通整数返回.否则返回undef.

但是,这并不能告诉我是否$addr是永久性的.可以在refaddr一段时间内参考的变化?例如,在C中,运行realloc可以改变存储在动态存储器中的东西的位置.这与Perl 5类似吗?

我问,因为我想制作一个由内而外的对象,我想知道是否refaddr($object)能成为一把好钥匙.例如,在XS中编程时似乎最简单.

perl perlguts

3
推荐指数
1
解决办法
173
查看次数

标签 统计

perl ×4

perlguts ×4

ntfs ×1

strawberry-perl ×1