perl - 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!
解决方案
您没有加载您显示的文件,可能是因为这个错误:
BEGIN { unshift @INC , '.';}
中的相对路径@INC
是相对于当前工作目录的。你想要脚本的目录,所以它应该是
use FindBin qw( $RealBin );
BEGIN { unshift @INC, $RealBin; }
更简单:
use FindBin qw( $RealBin );
use lib $RealBin;
您发布的代码在其他方面很好。它不会导致您发布的错误。
推荐阅读
- mongodb - mongodb - 管道阶段规范对象必须只包含一个字段。- 关于创建视图
- javascript - React Chrome 扩展错误:未捕获的 SyntaxError:无法在模块外使用 import 语句
- python - 非归一化自协方差函数
- airflow - Airflow - 如何处理异步 API 调用?
- java - Firebase 管理 SDK - java.lang.NoClassDefFoundError
- wordpress - 附属 WP - 推荐的修改
- python - 如何使 FuncAnimation 动画更快?
- python - 为什么我在pycharm和IDLE中运行同一个程序会得到不同的结果?
- python - 停止气流回填运行
- c++ - 关于运算符 + 重载