2

Moose の学習を始めたばかりで、非常に基本的なクラスを作成しました。これが私のコードです:

人.pm

package Person;

use Moose;

has fname => (
  is => 'rw',
  isa => 'Str',
  reader => 'getFirstName',
);

has lname => (
  is => 'rw',
  isa => 'Str',
  reader => 'getLastName',
  writer => 'setLastName',
);

sub printName {
  my $self = shift;
  print $self->getFirstName() . " " . $self->getLastName(), "\n";
}

no Moose;
__PACKAGE__->meta->make_immutable;

person.pl

#!/usr/bin/env perl

use strict;
use warnings;
use Person;

my $person = Person->new(fname => 'jef', lname => 'blah',);
print $person->fname, $person->lname, "\n";
$person->setLastName('bleh');
$person->getName();

このコードが終了するのは8 行目です。名の属性は表示されますが、lname については愚痴をこぼしCan't locate object method "lname" via package "Person" at ./person.pl line 8. ます。ここで、writerin lname を取り出せば問題ありません。私が作成したゲッターを使用できることはわかっていますが、なぜライターは属性自体へのアクセスを拒否するのでしょうか? 何かわからなくなってきたような…。

4

1 に答える 1