在locate.pl中执行perl应用程序时出错

时间:2013-06-25 10:40:50

标签: windows perl

这是错误:

No 'new' for class 'Spec::Benchmark::bzip2401' in 'C:/Users/Tester/Documents/SpecINT2k6_WoT/benchspec/CPU2006/401.bzip2/Spec/object.pm'

locate.pl文件中的错误点:

my $class="Spec::Benchmark::${name}${num}";
                if (!$class->can('new')) {
                    Log(0, "\nNo 'new' for class '$class' in '$pm'\n");
                    next;
                }

这是指向整个locate.pl文件http://ks.tier2.hep.manchester.ac.uk/Repositories/other-software/SPEC_CPU2006v1.1/bin/locate.pl

的链接

这是object.pm文件http://codepad.org/O196ykIq

运行Specint2006套件时出现此错误,但此错误与套件无关。任何人都可以告诉我!$class->can('new')做了什么,为什么它在这里回归真实?

感谢。

1 个答案:

答案 0 :(得分:1)

可以检查Class是否具有该方法。返回值始终是coderef。如果类不知道方法,则返回值为 undef 。 Class不知道新方法,所以它是假的。但是你用

来称呼它
!$class->can('new')

来自HERE

同样,关于拥有有效的invocand的相同规则适用 - 使用eval块或祝福,如果你需要额外的偏执。