错误:"找不到对象方法" new"通过包"在Perl

时间:2014-04-01 11:11:18

标签: perl object module

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

我有......

  • connect4.pl
  • Player.pm

我正在尝试在connect4,pl中使用模块“播放器”,但是当我尝试创建模块的实例时,我得到错误:“找不到对象方法”new“via”。

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

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

use Player;

my $temp_connect_four = Player -> new("parameters");

package connect4;

sub new{
#some variables
}

#more methods/subroutines

有什么问题?

1 个答案:

答案 0 :(得分:8)

你需要有类似的东西:

file:Player.pm

package Player;
use strict;
use warnings;
sub new {
    ...
}

您的主要脚本connect4.pl

use strict;
use warnings;
use Player;
my $player = Player->new( ... args...);

修改

首先回答了上述情况,但基于这个事实,你知道如何组织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.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;
带有main.pl脚本的

文件:

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

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

say $player->info();

运行main.pl会产生:

The player John is 15 years old.

正如您所看到的,“Mo”为您提供了一种免费的“新”方法。 (以及许多其他事情)。

你真的需要阅读: