首页 > 解决方案 > Perl OOP 看不到新方法

问题描述

开始学习Perl,尝试OOP,创建主程序和包。尝试创建类包的对象时,在主文件中收到错误。在包内调用新方法有效。

主文件

use strict;
use warnings;
BEGIN { unshift @INC , '.';}
use Stack01Lib;

print "Hello, World!\n";

my @stack = new Stack01Lib();

Stack01Lib.pm

  package Stack01Lib;

  use strict; 
  use warnings;

  sub new {
    my($class) = shift;
    my $self = { };

    bless $self, $class;

    return $self;
  }

1;  

print "Loaded\n";

编译后

Can't locate object method "new" via package "Stack01Lib" (perhaps you forgot to load "Stack01Lib"?) at D:\Projects\perl\hello\Main.pl line 26.
Loaded
Hello, World!

标签: perl

解决方案


您没有加载您显示的文件,可能是因为这个错误:

BEGIN { unshift @INC , '.';}

中的相对路径@INC是相对于当前工作目录的。你想要脚本的目录,所以它应该是

use FindBin qw( $RealBin );
BEGIN { unshift @INC, $RealBin; }

更简单:

use FindBin qw( $RealBin );
use lib $RealBin;

您发布的代码在其他方面很好。它不会导致您发布的错误。


推荐阅读