错误:"无法在Perl中找到对象方法"new"via package"

Lar*_*ung 2 perl module object

我是Perl的新手,所以我在使用OOP时遇到了一些问题.

我有...

  • connect4.pl
  • Player.pm

我正在尝试在connect4,pl中使用模块"播放器",但是当我尝试创建模块的实例时,我得到错误:"无法找到对象方法"新"通过包".

我已经阅读了其他帖子,但我不太明白他们的问题是什么以及它是如何修复的......

这是一个片段(我删除了许多行,我只是包含了我认为重要的内容)

use Player;

my $temp_connect_four = Player -> new("parameters");
Run Code Online (Sandbox Code Playgroud)

package connect4;

sub new{
#some variables
}

#more methods/subroutines
Run Code Online (Sandbox Code Playgroud)

有什么问题?

Nem*_*emo 8

你需要有类似的东西:

file:Player.pm

package Player;
use strict;
use warnings;
sub new {
    ...
}
Run Code Online (Sandbox Code Playgroud)

你的主要脚本connect4.pl

use strict;
use warnings;
use Player;
my $player = Player->new( ... args...);
Run Code Online (Sandbox Code Playgroud)

编辑

首先回答了上面的问题,但基于这个事实,你知道如何组织perl软件包,恕我直言,你需要更多的评论,从perl-beginner的角度来看(就像我一样).你可能会从perl-gurus获得更好更准确的答案.

如果你开始用perl,恕我直言学习OO,你应该开始使用CPAN 的" Mo "或" Moo "包.它们为您提供了一些不错的"糖",它极大地帮助您开始在perl中开发面向OO的程序,并允许您稍后将包扩展到Moo?更聪明的兄弟 - > Moose.

必须说,这并不意味着你不需要学习perl OO的基本原理.

因为大多数CPAN模块都是在没有Mo?se的情况下编写的,所以您将阅读的许多程序都是用传统的perl-OO编写的,因此您需要学习它,但是(根据我自己的经验)它需要更陡峭的学习曲线.你需要了解包结构,什么是" 祝福 "等等.使用"Mo"(或Moose)可以帮助您隐藏很多东西,稍后您将学习它们.

使用"Mo"可以帮助您在没有完全理解的情况下获得更快的结果 - 为什么它可以正常工作.;)/或许,现在很多perl专家会认为这是一种错误的学习方法.:)/

使用"Mo"的Player示例可以像下一个一样编写:

文件:Player.pm

package Player;
use strict;
use warnings;
use Method::Signatures::Simple;  # for automatic $self using "method" instead of the "sub"
use Mo;

has 'name';
has 'age';

method info {
        return "The player " . $self->name . " is " . $self->age . " years old.";
}
1;
Run Code Online (Sandbox Code Playgroud)

main.pl脚本的文件:

use strict;
use warnings;
use feature 'say';
use Player;

my $player = Player->new(name => 'John', age => 15);

say $player->info();
Run Code Online (Sandbox Code Playgroud)

运行main.pl会产生:

The player John is 15 years old.
Run Code Online (Sandbox Code Playgroud)

如您所见,"Mo"为您提供了一种免费的"新"方法.(还有很多其他的东西).

你真的需要阅读: