Perl OOP开发实例化对象报错:无法找到Stack01Lib包的new方法
问题原因和修复方法
- 写法歧义导致方法解析失败
你使用的间接对象写法new Stack01Lib()存在语法解析歧义,Perl会优先尝试将Stack01Lib()解析为函数调用,而非作为类名传入new方法,进而导致找不到类的new方法报错。标准写法应该使用类方法调用语法:类名->new()。 - 接收变量类型错误
类的new方法返回的是单个标量类型的对象引用,不能用数组@stack接收,需要声明为标量变量$stack。 - 模块搜索路径适配问题(可选优化)
你当前使用BEGIN { unshift @INC , '.';}是将运行脚本时的当前工作目录加入模块搜索路径,如果你在其他目录下执行该脚本,会出现找不到同目录下自定义模块的问题,推荐使用FindBin模块获取脚本所在的真实目录加入搜索路径。
修改后的完整代码
Main.pl
use strict; use warnings; # 更稳妥的模块搜索路径配置 use FindBin qw($Bin); BEGIN { unshift @INC, $Bin; } use Stack01Lib; print "Hello, World!\n"; # 标准类方法调用写法,用标量接收对象 my $stack = Stack01Lib->new(); # 验证对象创建成功 print "对象创建成功:", ref $stack, "\n";
Stack01Lib.pm 无需修改,保持原有代码即可。
运行验证
修改后运行输出如下,代表运行正常:
Loaded Hello, World! 对象创建成功:Stack01Lib
内容的提问来源于stack exchange,提问作者valentine
相关产品推荐
相关产品推荐

