Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在perl中创建对象时出错_Perl_Oop - Fatal编程技术网

在perl中创建对象时出错

在perl中创建对象时出错,perl,oop,Perl,Oop,我已经创建了一个名为person_b的类,我正在尝试从该类创建一个对象。但这是一个错误 下午二时 main.pl 输出 main 无法通过main_b.pl第5行的包“main”找到对象方法“name”。 打字错误? 您拼错了$class变量的名称,导致bless试图执行bless$self,undef 如果use strict和use warnings'all'已就位,则会产生有用的错误消息 在PersonB.pm的bless中使用未初始化值$calss 对“”的显式祝福(假定包为main)

我已经创建了一个名为
person_b
的类,我正在尝试从该类创建一个对象。但这是一个错误

下午二时 main.pl 输出
main
无法通过main_b.pl第5行的包“main”找到对象方法“name”。
打字错误?

您拼错了
$class
变量的名称,导致
bless
试图执行
bless$self,undef

如果
use strict
use warnings'all'
已就位,则会产生有用的错误消息

在PersonB.pm的bless中使用未初始化值$calss
对“”的显式祝福(假定包为main)
这就是为什么你的节目会播出

无法通过包“main”定位对象方法“name”
  • 您必须始终在编写的每个Perl源文件的顶部添加
    use strict
    use warnings'all'

  • 包名称应以大写字母开头,并且包含它们的文件的名称应完全匹配

  • 您应该避免使用间接对象表示法
    newperson\b
    。它最好写成
    PersonB->new

这个代码很好用

人事下午二时
包装人员b;
严格使用;
使用“全部”警告;
次新{
我的$class=shift;
祝福{},$class;
}
子名称{
打印“名称为…”\n;
}
1.
main.pl
使用PersonB;
严格使用;
使用“全部”警告;
使用Scalar::Util'foweld';
我的$per=个人->新建;
打印($per),“\n”;
$per->name;
输出
PersonB
名字是。。。。

…这就是为什么您应该始终使用严格的
;使用警告Can't locate object method "name" via package "main" at main_b.pl line 5.
package person_b;

sub new {
    $class=shift;
    $self={};
    bless($self,$calss);
    return $self;
}

sub name {
    print "The name is ....\n";
}

1;
use person_b;
use Scalar::Util 'blessed';

$per = new person_b();
print blessed($per), "\n";
$per->name();
    bless($self,$calss);
                 ^^^^^