你好世界在perl中的OOP示例?

com*_*fan 4 perl

我正在读一本perl书,但只看过sub关键字的函数示例.

有定义和使用我自己的类的例子吗?

如何将下面的PHP重写为perl?

class name {

   function meth() {
     echo 'Hello World';
   }
}

$inst = new name;
$inst->meth();
Run Code Online (Sandbox Code Playgroud)

Ale*_*lex 14

basic-perl方式是:

在'Foo.pm'文件中:

use strict;
use warnings;
package Foo;
sub new {
   my $class = shift;
   my $self = bless {}, $class;
   my %args = @_;
   $self->{_message} = $args{message};

   # do something with arguments to new()
   return $self;
}

sub message {
   my $self = shift;
   return $self->{_message};
}

sub hello {
   my $self = shift;
   print $self->message(), "\n";
}
1;
Run Code Online (Sandbox Code Playgroud)

在你的脚本中:

use Foo;
my $foo = Foo->new(message => "Hello world");
$foo->hello();
Run Code Online (Sandbox Code Playgroud)

你可能更喜欢使用Moose,在这种情况下文件'Foo.pm'是:

package Foo;
use Moose;
has message => (is => 'rw', isa => 'Str');
sub hello {
    my $self = shift;
    print $self->message, "\n";
}
1;
Run Code Online (Sandbox Code Playgroud)

因为Moose为您制作了所有的访问器.你的主文件是完全一样的......

或者你可以使用Moose扩展来使一切变得更漂亮,在这种情况下,Foo.pm变为:

package Foo;
use Moose;
use MooseX::Method::Signatures;
has message => (is => 'rw', isa => 'Str');

method hello() {
    print $self->message, "\n";
}
1;
Run Code Online (Sandbox Code Playgroud)

  • Moose是Perl的更高级别的对象框架,它是一种编写代码的方式,无需自己执行某些低级操作,也可以使用强大的可扩展对象语言.但是,您首先需要了解普通的Perl示例.正如其他人所说,看看Chromatic的现代Perl书籍,逐步介绍,你不会只是通过查看工作代码直接得到它. (2认同)

fri*_*edo 8

Modern Perl是一本优秀的书,免费提供,其中有关于使用Moose编写OO Perl的详尽部分.(从PDF版本的第110页开始.)

  • @ compile-fan - 我想要一匹小马.学习一门新语言需要工作. (5认同)

Nem*_*emo 7

我将从perlboot手册页开始.

从那里你可以继续perltoot,perltoocperlbot ......

  • @ compile-fan - 如果您拒绝花十分钟阅读文档,则无权尝试在Perl中使用OO. (5认同)
  • @KarelBílek - 如果有人试图阅读教程并且没有得到它,他们会来这里寻求更多教程.如果有人不知道这种语言,是在截止日期并需要复制和粘贴的代码来获得工作的货物崇拜风格,他们在这里要求我们提供一个简单的例子来说明如何做相当于他们用另一种语言编写的一些代码.OP没有表示对学习有任何兴趣. (2认同)

Suk*_*ima 5

我发现这是一个更简约的版本:

package HelloWorld;
sub new
{
    my $class = shift;
    my $self = { };
    bless $self, $class;
    return $self;
}
sub print
{
    print "Hello World!\n";
}

package main;
$hw = HelloWorld->new();
$hw->print();
Run Code Online (Sandbox Code Playgroud)

对于任何希望使用这个进一步分叉的人来说,访问https://gist.github.com/1033749

  • @compile,如果你已经阅读过其他人之前提供的教程和手册链接,你就会知道这个问题的答案. (4认同)
  • _minimalist_版本是`sub new {bless({},$ _ [0])}`.(当然称为"HelloWorld-> new-> print".) (2认同)