初めてperlでclassを作ってみた。
内容はあんまり無い、phpで誰しも真っ先に作るclass。
配列にkeyとvalをぽんぽん入れて、出せて、毎回array_key_existsしなくて良い。
そんなclassはどう書くのか試してみた。
1 #!/usr/local/bin/perl
2
3 package dataContainer;
4 use strict;
5 use warnings;
6 use Data::Dumper;
7 use Class::Struct;
8
9 struct( container => '%', ); # classのメンバ変数を宣言
10
11 sub init {
12 my ($self) =@_;
13 my %hash_ref;
14 $self->container(\%hash_ref);
15 }
16
17 sub set {
18 my ($self,$key,$val) =@_;
19 ${%{$self->container}}{$key} = $val;
20 return 1;
21 }
22
23 sub get {
24 my ($self,$key) = @_;
25 my %hash_ref = %{$self->container};
26 return $hash_ref{$key} if exists $hash_ref{$key};
27 }
28
29 package Main;
30
31 my $obj = new dataContainer; # constructor
32 my $obj2 = new dataContainer; # constructor
33
34 $obj->init();
35 $obj2->init();
36
37 print "================================\n";
38 $obj->set('hoge', 'moge');
39 $obj->set('hoge1', 'moge1');
40 $obj2->set('agg', 'hagehaghe');
41 $obj2->set('iya', 'sorehanai');
42
43 # DEBUG
44 #my @hoge = ( %{$obj->container} );
45 #my $dumper = new Data::Dumper(\@hoge);
46 #print $dumper->Dump();
47
48 print $obj->get('hoge'). "\n";
49 print $obj->get('hoge1'). "\n";
50 print $obj2->get('iya'). "\n";
51 print $obj2->get('naiyo'). "\n";
52
53 1;
きもいようきもいよう。
コード貼り付けにVOXは向いてませんね。
やはりはてなでしょうか。
何でキモイと思うのでしょう。
- Class::Structを利用するとコンストラクタが使えない?ので毎回initが必要?マジで?コンストラクタ使いたいよ。
- メンバ変数containerはハッシュだってstructで宣言してるのにinitで必ずリファレンスと紐つけねばならない
- 運命の19行。self->containerをハッシュにキャストして、それをスカラーにキャストして扱う。(これしかないの?マジで?)
- 26行みたいな書き方はすげーいやだったのが段々快感に・・・
- 値のdumpが面倒。
- 引数のチェックは自前実装?(してないけど)
- typoしまくる。(俺のせいか、テストハーネス早いうちに学ばないと。)
- あああ、setでARRAYやHASHを入れる場合の考慮してないや、どう動くのかしら。