perlのClass::Accessorを使うと以下のようにかけるかと思います
perl
1#sample.pl 2package Person; 3 4use strict; 5use warnings; 6use Data::Dumper; 7use base qw/Class::Accessor/; 8 9my $person = Person->new; 10$person->set('foo','bar'); 11print Dumper $person;
以下ターミナル画面
perl sample.pl
$VAR1 = bless( {
'foo' => 'bar'
}, 'Person' );
ターミナル画面ここまで
これと同じ結果が得られるパッケージ(?)を想定して次のプログラムをClass::Accessorのソースから大部分コピペして書いたのですがエラーが出てしまいました
perl
1#sample2.pl 2package Person; 3 4use strict; 5use warnings; 6 7sub new { 8 my($self) = shift; 9 if(@_) { # set 10 return $self->set('foo', @_); 11 } 12 else { 13 return $self->get('foo'); 14 } 15 } 16 17sub set { 18 my($self, $key) = splice(@_, 0, 2); 19 20 if(@_ == 1) { 21 $self->{$key} = $_[0]; 22 } 23 elsif(@_ > 1) { 24 $self->{$key} = [@_]; 25 } 26 else { 27 $self->_croak("Wrong number of arguments received"); 28 } 29} 30 31sub get { 32 my $self = shift; 33 34 if(@_ == 1) { 35 return $self->{$_[0]}; 36 } 37 elsif( @_ > 1 ) { 38 return @{$self}{@_}; 39 } 40 else { 41 $self->_croak("Wrong number of arguments received"); 42 } 43} 44 45my $person = Person->new; 46$person->set('foo', 'bar'); 47
エラー内容:Can't use string ("Person") as a HASH ref while "strict refs" in use at sample2.pl line 34.
自分で書いた方のプログラムですとnewメソッド、setメソッド、getメソッド全て上手くかけていないようなのですが原因がわかりません
Class::Accessorを使わずにClass::Accessorと同じ値を返してくれるnewメソッド、setメソッド、getメソッドを書く方法を教えてください
よろしくお願いします
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/07/01 04:25