- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在 Storable 中遇到卡住对象的问题。当 Storable 解冻一个对象时,它应该加载该类。这通常是正确的,但有时并非如此。这是一些示例代码...
#!/usr/bin/env perl -l
use strict;
use warnings;
use Storable;
if( fork ) {
}
else {
print "In child.";
# Load modules in a child process so the parent does not have them loaded
require Foo;
print $INC{"Foo.pm"};
print $Foo::VERSION;
Storable::store( Foo->new("http://example.com"), "/tmp/tb2.out" );
require DateTime;
print $INC{"DateTime.pm"};
Storable::store( DateTime->new(year => 2009), "/tmp/uri.out" );
exit;
}
wait;
print "Child is done.";
print "------------------------------";
print "DateTime is not loaded" if !$INC{"DateTime.pm"};
my $datetime = Storable::retrieve("/tmp/uri.out");
print $INC{"DateTime.pm"};
print $datetime->year;
print "Foo is not loaded" if !$INC{"Foo.pm"};
my $obj = Storable::retrieve("/tmp/tb2.out");
print $INC{"Foo.pm"};
print $obj->id;
还有非常简单的 Foo.pm。
$ cat lib/Foo.pm
package Foo;
use strict;
use vars qw($VERSION);
$VERSION = "1.60";
sub new {
my $class = shift;
return bless { foo => 23 }, $class;
}
sub id { 42 }
1;
我从那个程序中得到...
In child.
lib/Foo.pm
1.60
/Users/schwern/perl5/perlbrew/perls/perl-5.16.2-threads/lib/site_perl/5.16.2/darwin-thread-multi-2level/DateTime.pm
Child is done.
------------------------------
DateTime is not loaded
/Users/schwern/perl5/perlbrew/perls/perl-5.16.2-threads/lib/site_perl/5.16.2/darwin-thread-multi-2level/DateTime.pm
2009
Foo is not loaded
Use of uninitialized value in print at /Users/schwern/tmp/test.plx line 38.
Can't locate object method "id" via package "Foo" at /Users/schwern/tmp/test.plx line 39.
如您所见,它会愉快地加载 DateTime 而不是我的 Foo 模块。对象已恢复,但未加载 Foo.pm。我在使用 Storable 2.34 和 perl 5.16.2 时遇到了这个问题。
人们可以重复这个问题吗?有解决办法吗?
最佳答案
DateTime 定义了 STORABLE_freeze
和 STORABLE_thaw
。可以推断出,Storable 记录了该类是否使用钩子(Hook)来卡住自身,并寻找相应的钩子(Hook)来解冻它。模块加载是钩子(Hook)逻辑的一部分,不会为 Foo 调用。
关于perl - 为什么 Storable 会加载一些类,而不加载其他类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16115714/
我是 neo4j 数据库的新手。我正在尝试通过加载 csv 文件来更新图形数据库中现有节点的特定节点。我的更新值 csv 文件如下所示 ID,SHOPNAME,DIVISION,DISTRICT,TH
我是 neo4j 数据库的新手。我正在尝试通过加载 csv 文件来更新图形数据库中现有节点的特定节点。我的更新值 csv 文件如下所示 ID,SHOPNAME,DIVISION,DISTRICT,TH
我很难理解 Storable 做。 我知道它将一个变量“存储”到您的磁盘中,但我为什么需要这样做呢?我会用这个模块做什么,我会怎么做? 最佳答案 突然想到的原因: 跨脚本调用保持内存 跨不同进程共享变
在我的生产环境中,我们拥有我们认为的由 Storable.pm 创建的损坏的可存储哈希。我无法复制 Dev 中的行为,这使得准确诊断变得困难。 该代码已经运行了很长时间,以及对其进行的更改中断正在从哈
我收到以下代码的错误 - 我怀疑它与 dispatch 函数的类型签名有关,该函数返回 Storable a 类型的 Vector 。更新 dispatch 函数类型签名以仅在类型签名中执行 Int3
我在 Haskell 模块中有以下数据类型,我想编写一个可存储实例以通过 FFI 将其与 C 一起使用: data MyType a = TypeDouble Double
我有一堆数据存储在 MySQL 表的单个列中。我可以访问将它存储在那里的约 5 年历史的 perl 代码,并且可以看到它是在存储之前用 Storable::nfreeze 卡住的所有哈希。 MySQL
我一直在阅读有关 Haskell 的 C FFI 的一些文档。我刚刚遇到了一个名为 Storable 的类型类。 ,我不是很明白。 这个类型类的实例,这些类型在与 C 代码交互时应该有一个指向它们的“
我明白了: GHCi> import Foreign.Storable GHCi> sizeOf False 4 我预计它是 1。但我认为它可能带有一些指针或迫使它变得更大的东西。但似乎没有必要: G
我在 Storable 中遇到卡住对象的问题。当 Storable 解冻一个对象时,它应该加载该类。这通常是正确的,但有时并非如此。这是一些示例代码... #!/usr/bin/env perl -l
我很好奇是否使用 Storable的 store_fd 和 fd_retrieve 允许我将数据结构存储到程序自己的 DATA 文件句柄中。我意识到这不是最佳实践,我只是好奇它是否有效,我的快速尝试似
我不是 Perl 专家,所以这可能是一个简单的问题。 我一直在使用 Storable,并关注 this example存储哈希。首先,我存储原始哈希。 use Storable qw(store re
下面的代码(大部分来自 Memoize 主页)创建了一个 0 字节的文件,然后 perl 崩溃,退出代码为 -1073741819。 我使用 ActivePerl 5.10 和最新的 5.16 版本对
如何构建IOVector来自 MVector ? IOVector 记录为: type IOVector = MVector RealWorld 我有一个如下所示的 MVector,我想构建 IOVe
尝试将散列引用存储在可存储文件中并且工作正常。但是,我还需要按排序顺序保存键 - 所以我使用了以下内容 tie %$hashref, 'Tie::IxHash'; 存储 $hashref, $file
我正在编写一个单元测试,我需要模拟一个返回 Class::Std::Storable 的函数目的。没有正常的方法可以使用 Data::Dumper 等序列化这些。相反,我可以这样做: use Stor
在 Storable.Vector Word8 之间转换的最佳方式是什么?和严格的ByteString ? 当然,非复制(无操作)方式将不胜感激。 我应该只是unsafeCoerce或者是否有一个库函
我有一些 Moose 对象和其他一些我想序列化的简单哈希对象(哈希、数组)。 起初,我使用了一个简单的 my $obj_store_file = nstore($obj); 和 my $obj = r
我正在尝试将写入非常缓慢的哈希写入数据文件,但不确定 Perl6 与 Perl5 相比如何做到这一点。这是一个类似的问题 Storing intermediate data in a file in
我将 Haskell FFI 与一个 C 库一起使用,该库定义了许多 struct 类型,这些类型包含指向 double 的指针,旨在被视为 double 的数组: typedef struct Fo
我是一名优秀的程序员,十分优秀!