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

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

  • 为所需的体系结构使用正确的参数和软件包列表配置AptPkg::Config '$_config'
  • 使用AptPkg::Cache->new创建缓存对象。
  • 调用方法AptPkg::Cache->policy创建AptPkg::Policy对象。
  • 调用方法AptPkg::Policy->candidate("program-name")
  • 下载用于所选体系结构的软件包。

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

    我试图建立一种变通办法,并且找到了一个解决方案,该脚本如何精确地在所有三种体系结构中正常工作:

    如果我连续两次创建缓存对象(使用AptPkg::Cache->new),它将起作用,并且脚本将下载所有三种架构的debian软件包:
    my $cache = AptPkg::Cache->new;
    $cache = AptPkg::Cache->new;
    

    我确定问题与AptPkg::Cache->new方法有关,因为我检查了其他所有可能导致问题的原因两次。所有的配置变量都已正确设置,对于每种体系结构,我什至为AptPkg::Cache->new设置了不同的哈希,但似乎我忽略了一些重要的事情。

    我对perl不太熟悉,所以我问你们是否有人可以解释为什么该脚本可用于变通方法,但并非没有它。此外,如果您的脚本中有两次相同的代码行,则看起来很奇怪。

    最佳答案

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

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

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

    10-08 16:28