Perl:libapt-pkg-perl AptPkg :: Cache->精确的新奇怪行为

Edl*_*nta 5 linux ubuntu perl constructor caching

AptPkg::Cache对精确包中的对象的构造函数有一个非常奇怪的问题libapt-pkg-perl (v. 0.1.25).

perl脚本旨在为三种不同的体系结构(i386,armel,armhf)下载debian软件包.对于每个架构,我执行以下操作:

  1. AptPkg::Config '$_config'为所需的体系结构配置正确的参数和包列表.

  2. 使用创建缓存对象AptPkg::Cache->new.

  3. 调用方法AptPkg::Cache->policy来创建AptPkg::Policy对象.

  4. 调用方法AptPkg::Policy->candidate("program-name").

  5. 下载所选体系结构的包.

这对Ubuntu Lucid很有效,但是使用Ubuntu Precise,我只能下载定义的第一个架构的软件包.对于其他两个体系结构,将没有安装候选者(方法AptPkg::Policy->candidate("Package-Name")不返回对象).

我尝试构建一个解决方法,我找到了一个解决方案,该脚本如何适用于所有三种体系结构,没有问题,精确:

如果我AptPkg::Cache->new连续两次创建缓存对象(有),它就会工作,脚本会下载所有三种架构的debian软件包:

my $cache = AptPkg::Cache->new;
$cache = AptPkg::Cache->new;
Run Code Online (Sandbox Code Playgroud)

我确定问题与该方法有关,AptPkg::Cache->new因为我检查了其他所有内容,可能导致问题的原因,两次.所有配置变量都设置正确,我甚至AptPkg::Cache->new为每个架构获得了不同的Hash ,但似乎我忽略了一些重要的东西.

我对perl不太熟悉,所以我问你们有没有人可以解释为什么脚本与变通方法一起工作但不是没有它.如果在脚本中有两次相同的代码行,那么看起来很奇怪.

小智 0

也许您遇到了这个错误 - https://bugs.launchpad.net/ubuntu/+source/libapt-pkg-perl/+bug/994509

那里有一个脚本可以测试您是否受到影响。如果还有其他问题,请考虑提交错误报告。

编辑:刚刚看到这是 11 个月大的:/