NAME
Simo::Manual - Manual for Simo
CAUTION
This article is under construction. please wait.
What is Simo?
Simo simplify Object Oriented Programing.
Simo is more useful than Class::Accessor.
Simo is more simple than Moose or Mouse.
You do not learn many syntax to do Object Oriented Programing.
Let't enjoy!
FEATURES
- 1. Can create accessors very simple way.
- 2. new method is prepared.
- 3. Can arrange accessor.( defalt value, constarant value or etc )
- 4. Can catch error object and get many information of error.
1. Install of Simo
1-1. Install of Simo
You can install Simo the following way.
cpan Simo
If you install Simo into Windows. You have to install nmake program.
1-2. Relative module of Simo
Simo have some relative module.
- 1. Simo::Error - create error object to get many information of error
- 2. Simo::Util - provide useful functions to manipulate of object
- 3. Simo::Constrain - constrain value when value is set through accessor
2. Class creating
2-1. Class creating and definition of accessor
You can define accessor very simple way.
Book class has three accessors( title, author, price ).
All you do to define accessor is calling ac function.
new method is automatically prepared.
and use strict; use warnings;
is import into your class.
2-2. Creating object
You can create object in normal way.
You can pass hash or hash ref to new method
use
Book;
my
$book
= Book->new(
title
=>
'Goog new'
,
author
=>
'Kimoto'
,
price
=> 2000 );
or
my
$book
= Book->new( {
title
=>
'Goog new'
,
author
=>
'Kimoto'
,
price
=> 2000 } );
3. �A�N�Z�b�T�̃I�v�V����
3-1. �t�B�[���h�̃f�t�H���g�l default
�t�B�[���h�̃f�t�H���g�l�̐ݒ�͈ȉ��̂悤�ɍs���܂��B
�t�B�[���h�ɒl���ݒ肳��Ă��Ȃ��Ƃ��ɃA�N�Z�b�T��Ăяo���� default �Ŏw�肳�ꂽ�l���g�p����܂��B
�擾�����l�́Adefault�Ŏw�肳�ꂽ�l���R�s�[�ł��B �f�t�H���g�l�����t�@�����X�Ȃǂ́u���l�╶����v�ȊO�̂�̂ł�����ꍇ�́AStorable��clone���ɂ��Ēl���R�s�[����܂��B ����́A�傫�ȃf�[�^�ł�����ꍇ�̓I�[�o�[�w�b�h�ɂȂ肦�܂��B
�f�t�H���g�l�����t�@�����X��I�u�W�F�N�g�ł�����ꍇ�́A default �ł͂Ȃ��Č�ʼn���� auto_build ��g�p���邱�Ƃ�l���ɓ��Ă��������B
3-2. �t�B�[���h�̍\�z auto_build
�Ƃ��ɁA���̃t�B�[���h�̒l�Ɋ�Â��āA�t�B�[���h��\�z�������ꍇ������܂��B ���Ƃ��A�t�B�[���h�ɐݒ肳�ꂽ�z�X�g������Net::FTP�I�u�W�F�N�g��\�z�������ꍇ�Ȃǂł��B
���̂悤�ȏꍇ�́Aauto_build ��g�p����ƕ֗��ł��B auto_build �I�v�V������w�肷��ƁA�A�N�Z�b�T���Ăꂽ�Ƃ��� �r���_�[���\�b�h����I�ɌĂяo���Ă���܂��B
�r���_�[���\�b�h�́Abuild_net_ftp �̂悤��
build_�A�N�Z�b�T��
�ɂ���K�v������܂��B
2��ڈڍs�̃t�B�[���h�ւ̃A�N�Z�X�́A�r���_�[���\�b�h�ɂ��Đݒ肳�ꂽ�l���g�p����܂��B
�܂�buildr_xxx�Ƃ������O��D�܂Ȃ��Ȃ�Aauto_build�I�v�V�����ɃT�u���[�`����w�肷�邱�Ƃ�ł��܂��B
sub
net_ftp{ ac
auto_build
=> \
&create_net_ftp
}
sub
create_net_ftp{
# ...
}
3-3-1. �t�B�[���h�̐��� constrain
�t�B�[���h�ɐ������������ꍇ������܂��B ���l�������ꂽ�������A���̃N���X�̃I�u�W�F�N�g�������ꂽ������肷��ꍇ�ł��B
���̂悤�ȏꍇ�́Aconstrain ��g�p���܂��B constarin �ɂ́A�D���Ȑ������n�����Ƃ�ł��܂����A �ʏ�́ASimo::Constrain �ɐ���̂��߂̊����p�ӂ���Ă���̂ł����g���܂��B
title�ɐݒ�ł���̕������Aauthor�ɐݒ�ł���̂�Person�N���X�̃I�u�W�F�N�g�����A price�ɐݒ�ł���̂͐����l�����Ƃ�����悤�ɁA�t�B�[���h�ɐݒ�ł���l������ł��܂��B
������Ɉᔽ����A��O���������v���O�����͏I�����܂��B �ȉ��̂悤�ȃ��b�Z�[�W���\������܂��B
Book::price must be integer.( this value is bad ) at b.pl line 6
3-3-2. ����ᔽ�ɂɑ����O����
Simo�̓t�B�[���h�ɐ���ᔽ���N������Ƃ��ɗ�O�𓊂��܂��B ���̗�O�͒P�Ȃ镶����ł͂Ȃ��āASimo::Error�I�u�W�F�N�g�ł��B
���̃I�u�W�F�N�g�́A����ᔽ��N�������t�B�[���h���A�ݒ肳�ꂽ�l�Ȃǂ̏����Ă��܂��B
���̃I�u�W�F�N�g�̏�������Ƃ��́ASimo::Util �� err ����g�p���܂��B
�ȉ��̗�ł́Aprice�ɐ����ȊO��n�����̂ŗ�O���������܂��B ���̗�O��eval�ŃL���b�`������Aerr ���œ�e��擾���邱�Ƃ��ł��܂��B
use
Book;
my
$book
=
eval
{ Book->new(
price
=>
'string'
,
title
=>
'Good news'
) };
if
(
my
$err
= err ){
my
$type
=
$err
->type;
# ��O�̎��
my
$msg
=
$err
->msg;
# ��O���b�Z�[�W
my
$pos
=
$err
->
pos
;
# ��O���N������ꏊ
my
$pkg
=
$err
->pkg;
# ��O���N������p�b�P�[�W��
my
$attr
=
$err
->attr
# ��O��N�������t�B�[���h��
my
$val
=
$err
->val;
# ��O�̌���ɂȂ���l
if
(
$attr
eq
'price'
){
# ��肽���G���[������s���B
}
else
(
$attr
eq
'title'
){
# ...
}
else
{
# ...
}
}
�ǂ̃t�B�[���h���Ő���ᔽ���N����āA���ꂪ�ǂ̂悤�Ȓl�Ȃ̂���擾�ł��邽�� �ڍׂȃG���[������s�����Ƃ��ł��܂��B
�G���[�I�u�W�F�N�g�ɂ‚��Ă� Simo::Error ��Q�Ƃ��Ă��������B
3-3-3 �Ǝ��̐�����̎��
���Ǝ��ɐ���������������Ȃ�Ή”\�ł��B Simo�̐�����Ɠ����쐬��@�ŁA�������쐬����Δ��ɒ��a�̎�ꂽ��̂ɂȂ�܂��B
Simo::Constrain��is_define���̎�����Ƃ��Čf�ڂ��Ă����܂��B
sub
is_defined(;$){
my
$val
=
shift
||
$_
;
defined
(
$val
) or $@ =
"must be defined.( undef is bad )"
,
return
0;
return
1;
}
������́A����������g�p���A�Ȃ���f�t�H���g�ϐ� $_ ��g�p����悤�ɂ��܂��B ���̂悤�ɋL�q����A
sub
title{ ac
constrain
=>
sub
{ is_defined } }
�̂悤�Ɉ��ȗ������L�q���”\�ɂȂ�܂��B
��������Ȃ�����ꍇ�́A$@ �Ƀ��b�Z�[�W��ݒ肵�āA�U�l��ԋp���Ă��������B ���̃��b�Z�[�W�̓G���[���b�Z�[�W�Ƃ��Ďg�p����܂��B
����������ꍇ�́A�^�l��ԋp���Ă��������B
3-3-4 �����̐����L�q�����@
�������̐����L�q�������ꍇ��2�‚̕�@������܂��B
�ЂƂ‚߂́A�����T�u���[�`���Ƃ��Ď�����邱�Ƃł��B �ȉ��̗��Book�N���X��Cloneable�N���X��p�����Ă��邱�Ƃ�ۏႷ���ł��B
sub
title{ ac
constain
=>
sub
{ isa Book && isa Cloneable } }
���ЂƂ‚́A�z��̃��t�@�����X�ɕ����̐������n����@�ł��B
sub
title{ ac
constrain
=> [ \
&is_xxx
, \
&is_yyy
, \
&is_zzz
] }
3-4-1. �t�B�[���h�l�̃t�B���^�[ filter
���A�ݒ肳���l�ɉ��炩�̏�����{�������̂Ȃ�filter��g�p���Ă��������B
�ȉ��̗�ł͐ݒ肳���l��啶���ɂ��܂��B
���ЂƂ–���̃X���b�V�����菜�������Ă����܂��B
�t�B���^�̂��߂̊�����ꍇ�́A�t�B���^��̒l��return�ŕԋp����悤�ɂ��Ă��������B
3-4-2 �����̒l�̃t�B���^
�t�B���^����Ɠ����悤�ɕ�����ׂ邱�Ƃ��ł��܂��B
sub
title{ ac
filter
=> [ \
&filter_xxx
, \
&fitler_yyy
, \
&filter_zzz
] }
3-5-1 �l���ݒ肳�ꂽ�ꍇ�̃g���K trigger
�g���K�Ƃ�Simo�ł́A�l���ݒ肳�ꂽ�ꍇ�Ɏ�s����郁�\�b�h�̂��Ƃ���܂��B
���Ƃ��A����l�ɕύX���������A���炩�̏������s�������ꍇ�Ƀg���K�͕֗��ł��B
�ЂƂ‚̗�Ƃ��āAGUI�ł̃v���O���~���O�ŁA �F�̒l���ύX���ꂽ��ĕ`�������Ăяo�������ꍇ�Ȃǂ��������܂��B
3-5-2 �����̃g���K
�g���K��A�����t�B���^�Ɠ����悤�ɕ����Ȃ�ׂ邱�Ƃ��ł��܂��B
sub
coloer{ ac
tirgger
=> [ \
&trigger_xxx
, \
&trigger_yyy
, \
&trigger_zzz
]
3-6 �ǂݎ���p�̃A�N�Z�b�T read_only
�ǂݎ���p�̃A�N�Z�b�T��쐬����ɂ́Aread_only��g�p���܂��B
�ǂݎ���p�̃A�N�Z�b�T�́A�l���ݒ肳��悤�Ƃ����Ƃ��ɁA��O�������܂��B
��ʓI�ɂ́Adefault �Ƒg�ݍ��킹�Ďg�p���܂��B
3-6 �n�b�V���Ƃ��Ẳ�߂������Bhash_force
Simo�ɂ́A�A�N�Z�b�T�ɐݒ肳���l�͕K���X�J���[�ł��B�܂��擾����ꍇ��K���X�J���[�ɂȂ�܂��B
�z���ݒ肷�邱�Ƃ�n�b�V����ݒ肷�邱�Ƃ͂ł��܂���B
�A�N�Z�b�T�ɔz�n���ꂽ�ꍇ�͂ǂ��Ȃ�ł��傤��?
my
$book
= Book->new;
$book
->author(
'Kimoto'
,
'Kenta'
,
'Mori'
);
���̂悤�ȏꍇ�́A�����I�ɔz��̃��t�@�����X�ւƕϊ�����܂��B
�‚܂�A�ݒ肳���i�K�ł́A
[
'Kimoto'
,
'Kenta'
,
'Mori'
]
�ɂȂ�܂��B
���Ƃ�
$book
->author(
main
=>
'Kimoto'
,
sub
=>
'Kenta'
);
�̂悤�Ƀn�b�V����ݒ肷��悤�ɈӐ}���Ă����Ƃ��Ă�
{
main
=>
'Kimoto'
,
sub
=>
'Kenta'
}
�ł͂Ȃ�
[
'main'
,
'Kimoto'
,
'sub'
,
'Kenta'
]
�̂悤�ɕϊ�����܂��B
�����Ńn�b�V���Ƃ��ĉ�߂��Ăق����ꍇ�͈ȉ��̂悤��hash_force��g�p���܂��B
4.�p��
4-1 �p�� base
Simo�Ōp����s���ɂ͈ȉ��̂悤�ɂ��܂��B Book�Ƃ����N���X��p�����āAMagazine�Ƃ����N���X��쐬�����ł��B
base ���W���[����g���̂ł͂Ȃ����Ƃɒ��ӂ��Ă��������B ���I�ɂ�base ���W���[����Ă�ł���̂ł����A�p���̏�����ۏႷ�邽�߂ɂ��̋L�q��s��Ă��������B
4-2 �~�b�N�X�C�� mixin
Simo�͋L�@��Ń~�b�N�X�C����T�|�[�g���܂��B
�ȉ��̗�́AClass::Cloneable��<Class::Comparable> ��~�b�N�X�C��������ł��B
Simo�̃~�b�N�X�C���́A�����ʂȂ��Ƃ͂��܂���BSimo�̃~�b�N�X�C���͒P�Ȃ鑽�d�p���ł��B
����ǂ�A�N���X������l�́A���d�p����Ӑ}������̂ł͂Ȃ��A�~�b�N�X�C����Ӑ}������̂� �Ƃ������Ƃ�`���邱�Ƃ��ł��܂��B
�‚܂�A�����̃N���X�̓R���X�g���N�^������A����������ׂ����\�b�h�����邩����Ȃ��Ƃ��� ���Ƃ�g�p�҂Ɋ��������邱�Ƃ��ł��܂��B
4-3 �I�[�o�[���C�h�”\�ȃR���X�g���N�^�̎�� new
�������x�Șb��ł��B�ǂݔ���Ă��܂��܂���B
���������玞�ɃI�[�o�[���C�h�”\�ȃR���X�g���N�^�����������Ȃ�ꍇ�����邩����܂���B
���ꂪ�A�ǂ̂悤�ȏꍇ��z�肵�Ă��邩�Ƃ����ASimo�ō쐬����Ă��Ȃ��N���X��p���������ꍇ�ł��B
������܂��傤�BCGI::Application ��p�����ĐV�����N���X���肽���Ƃ��܂��B
���̂悤�ɃN���X��쐬�����ꍇ�A���ɂȂ�̂́Aapp_name�̏����ł��Ȃ��Ƃ������Ƃł��B
new�ɌĂ��R���X�g���N�^�́ACGI::Application�̂�̂ł���ASimo�̂�̂ł͂���܂���B
my
$myapp
= MyApp->new(
app_name
=>
'YHA'
);
�̂悤�ɋL�q���邱�Ƃ��ł��Ȃ��̂ł��B
������s���邽�߂ɂ́A�e�̃R���X�g���N�^���s���ăI�u�W�F�N�g�����Ă���A ���̃I�u�W�F�N�g��app_name������K�v������܂��B
CGI::Application�̃R���X�g���N�^�ł́ATMPL_PATH, PARAMS, QUERY ����邱�Ƃ��ł��܂��B Simo�̃R���X�g���N�^�ł́Aapp_name����邱�Ƃ��ł��܂��B
���̍��̂�s���͔̂��ɖʓ|�ł��BSimo�́A���̋�J��ł��邾����菜�����߂ɁA new_self_and_parent�Ƃ������\�b�h���Ă��܂��B
�e�̃R���X�g���N�^���s���Ȃ���ASimo�̃R���X�g���N�^���s����ɂ́A�ȉ��̂悤�ɂ��܂��B
new_self_and_parent �̑�2��ɂ́A�e�̃R���X�g���N�^�̏���p�����[�^��z��̃��t�@�����X�Ŏw�肵�܂��B
�����L�q����A
my
$myapp
= MyApp->new(
app_name
=>
'YHA'
,
TMPL_PATH
=>
'xxx'
,
PARAMS
=> {}
QUERY
=> CGI->new );
�̂悤�ɁA�e�̃R���X�g���N�^��Simo�̃R���X�g���N�^���Ɏ�s���邱�Ƃ��”\�ł��B
�����āA���Ȃ��́ACGI::Application�p�̃R���X�g���N�^�Ƃ��āA�������֗��Ȃ�̂�ł��邩����܂���B
�����Ȃ�A�����R���X�g���N�^�݂̂̃N���X�ɂ��Č��܂��傤�B
package
Simo::New::CGI::Application;
sub
new{
my
$self
=
shift
->new_self_and_parent(
@_
, [
'TMPL_PATH'
,
'PARAMS'
,
'QUERY'
] );
# �������֗��Ȃ��Ƃ�s���B
return
$self
;
}
�����Ă��̂悤�ɂ��č쐬�����Ȃ�A
�Ƃ����ӂ���new���\�b�h��C���|�[�g���邱�Ƃ��ł��܂��B����͂���Ɍp���”\�ł���āA
�̂悤�ɗ��p���邱�Ƃ��ł��܂��B
�����Ɠ���B
4-4 new��I�[�o�[���C�h����B
new�̃I�[�o�[���C�h�ɂ‚��ď����Ă����܂��B
Simo�ɂ��Ď����I�ɗp�ӂ��ꂽnew�́A�I�[�o�[���C�h���邱�Ƃ��ł��܂��B
����́AClass::Accessor�ɑ���傫�ȗ��_�ł��B
�܂��Anew��I�[�o�[���C�h���邱�Ƃ𐄏����Ȃ�Moose��Mouse�ɑ��Ă�傫�ȗ��_�ł��B
Perl�ŃI�u�W�F�N�g�w���w��ł����m����Simo�ł͎��R�ɗ��p���邱�Ƃ��ł��܂��B
new�̃I�[�o�[���C�h�̐��`�͈ȉ��̂悤�ɂȂ�܂��B
5. ���̑��̋@�\
5-1 �K�v�s�Œ��ȃt�B�[���h
���Ƃ���title��author�����t�B�[���h���K�v�s�Œ��Ȃ���������܂��B
REQUIRED_ATTRS�Ƃ������\�b�h��I�[�o�[���C�h���Ă��������B
���̂悤�ɋL�q����A
my
$book
= Book->new;
�̂悤�ȋL�q����Ƃ��ɁA��O�𓊂��Ă���܂��B
���̂Ƃ��̃G���[�̃^�C�v��
attr_required
�ɂȂ�܂��B
���z�Ƃ��ẮA sub title{ ac required => 1 } �Ƃ����L�q���������B
����ǂ�ASimo�̃A�N�Z�b�T�͕K���x���ŕ]������邽�߁A�R���X�g���N�^���Ăяo���ꂽ���_�ł́A ���ꂪ�A�K�v�s�Œ��Ȃ̂��ǂ�����ł��܂���B
���̂��߂ɁAREQUIRED_ATTRS ��I�[�o�[���C�h����Ƃ�������Ƃ�܂����B
�X�y�����O�̃~�X�ɔ��ɋC��‚��Ă�������( �e�ՂɊԈႦ�Ă��܂��܂��B)
5-2 �K�v�s�Œ��ȃt�B�[���h�ƌp���̖��
��L��Book�N���X��p������Magazine�Ƃ����N���X��쐬�����ꍇ�A�K�v�s�Œ��ȃt�B�[���h�̒�`�����@�����܂��B
�����Ŕ��ɊԈႢ�₷�����Ƃ�����܂��Btitle, auhtor, price ��3�‚̃t�B�[���h��K�v�s�Œ��ɂ��邽�߂ɁA
�Ə����Ă��܂�Ă͊ԈႢ�ł��B
REQUIRE_ATTRS�̓I�[�o�[���C�h����邽�߂ɁAprice�������K�v�s�Œ��ȃt�B�[���h�ɂȂ�Ă��܂��܂��B
���������́A
sub
REQUIRED_ATTRS{
qw/title author price/
}
�Ə����K�v������܂��B
�ł����āA�ʓ|����ˁB
�����ŁASimo�͊ȈՂȋL�q��p�ӂ��Ă��܂��B
sub
REQUIRED_ATTRS{
'price'
, and_super }
and_super ���\�b�h��ĂԂƃX�[�p�[�N���X�̃��\�b�h���Ă�A 'title' �� 'author' ���ԋp����܂��B
6. �I�u�W�F�N�g��֗��ɑ��삷��
�����Simo�̋@�\�̈�ʂ�̉���I���܂����B
�����܂ł́A�N���X�̍���̉��ł����B
���Simo�ł́A�N���X���邾���ł͂Ȃ��A�I�u�W�F�N�g��g�����ɂ�z�������‚���ɂȂ�Ă��܂��B
6-1. �����̃t�B�[���h�ɒl��ݒ肷��B set_values
�����̃t�B�[���h�̒l��ݒ肷��ɂ͈ȉ��̂悤�ɂ��܂��B
my
$book
= Book->new;
$book
->set_values(
title
=>
'Good news'
,
author
=>
'Kimoto'
);
�ŁA�����̃t�B�[���h�ɒl��ݒ肷�邱�Ƃ��ł��܂��B
6-2. �����̃t�B�[���h����l����o���B get_values
�����̃t�B�[���h����l����o���ɂ͈ȉ��̂悤�ɂ��܂��B
my
(
$title
,
$auhtor
) =
$book
->get_values(
qw/title author/
);
�n�b�V���X���C�X�̂悤�Ɏg�p�ł��܂��B
6-3 �����̃t�[���h����l��n�b�V���̃��t�@�����X�Ƃ��Ď��o���B get_hash
�����̃t�B�[���h����l��n�b�V���̃��t�@�����X�Ƃ��Ď��o�����Ƃ��ł��܂��B
my
$hash
=
$book
->get_hash(
qw/title author/
);
����ꂽ�n�b�V���̃��t�@�����X��
{
title
=>
'xxx'
,
author
=>
'yyy'
}
�̂悤�ɂȂ�܂��B
6-3. �I�u�W�F�N�g�̃R�s�[��쐬����B clone
�I�u�W�F�N�g�̃R�s�[��쐬����ɂ�
my
$book_copy
=
$book
->clone
�Ƃ��܂��B���I�ɂ́AStorable �� dclone�����g�p����Ă��܂��B
6-4. �I�u�W�F�N�g��V���A���C�Y�܂��̓f�V���A���C�Y����B freeze, thaw
�I�u�W�F�N�g��V���A���C�Y����ɂ́A
my
$book_str
=
$book
->freeze;
�ŃV���A���C�Y����ɂ́A
my
$book
= Simo->thaw(
$book_str
);
�Ƃ��܂��B
�V���A���C�Y�Ƃ����̂́A�I�u�W�F�N�g��ۑ��ł���悤�ɕ���������̂ł��B
�f�V���A���C�Y�Ƃ����̂́A������I�u�W�F�N�g�ւ̕����̂��Ƃł��B
���I�ɂ́AStorable�� freeze����thaw����g�p���Ă��܂��B
6-5 �I�u�W�F�N�g�ɐݒ肳�ꂽ�l���L��ǂ�����m�F����B validate
�I�u�W�F�N�g�ɐݒ肳�ꂽ�l���L��ǂ�����m�F����ɂ́A
$book
->validate(
title
=>
sub
{
length
$_
< 100 },
price
=>
sub
{
$_
> 0 }
);
�Ƃ��܂��B
�L��ǂ�����m�F��������U��Ԃ����Ƃ��́A��O�𓊂��܂��B
���̂Ƃ����������O�́A Simo::Error �I�u�W�F�N�g�ɂȂ�܂��B
�G���[�̃^�C�v�́A
value_invalid
�ɂȂ�܂��B
eval�ň͂�ė�O��E���ɂ́ASimo::Util�� err ����g���܂��B
Simo::Util
qw( o err )
;
eval
{
$book
->validate(
title
=>
sub
{
length
$_
< 100 },
price
=>
sub
{
$_
> 0 }
);
};
if
(
my
$err
= err ){
if
(
$err
->attr eq
'title'
){
}
elsif
(
$er
->attr eq
'author'
){
}
esle{
}
}
���̂悤��validate���\�b�h��err����g�p����ƁA �t�B�[���h�̒l���ƂɃG���[��`�F�b�N���邱�Ƃ��ł��܂��B
6-6 new ���ē����ɁAvalidate����B new_and_validate
new �� validate ���ɍs����ƕ֗��ȏꍇ������܂��B
my
$q
;
# �O������������l�B
my
$book
= Book->new_and_validate(
title
=>
$q
->{ title },
sub
{
length
$_
< 100 },
author
=>
$q
->{ author },
sub
{
$_
> 0 }
);
���̂悤�ɃI�u�W�F�N�g�������Ȃ���A�l�̗L��̃`�F�b�N�������ɂł��܂��B
��O��ߊl����eval��g�ݍ��킹�Ĉȉ��̂悤�ɏ����ƕ֗��ł��B
my
$book
=
eval
{
Book->new_and_validate(
title
=>
$q
->{ title },
sub
{
length
$_
< 100 },
author
=>
$q
->{ author },
sub
{
$_
> 0 }
)
};
���̃��\�b�h�͕K��3�g�ŋL�q����K�v������܂��B
�����݂������Ȃ��ꍇ�́A
my
$book
= Book->new_and_validate(
price
=>
$q
->{ price },
sub
{ 1 }
);
sub{ 1 } ��n���܂��B
�܂��A���̃��\�b�h�͂��ЂƂ‚̋L�@������܂��B�ӂ��‚̃n�b�V�����t�@�����X��n����@�ł��B
my
$book
= Book->new_and_validate(
{
title
=>
$q
->{ title },
author
=>
$q
->{ author },
},
{
title
=>
sub
{
$_
> 0 },
author
=>
sub
{
length
$_
< 100 }
}
);
6-7 ���\�b�h��A������s����B run_methods
���\�b�h��A�����Ď�s����ɂ́Arun_methods ��g�p���܂��B
���Ƃ��A�f�[�^��I���悤�ȋL�@��ƒ��\�b�h�ɑ��ĘA���I�Ɏ�s����Ƃ��ɕ֗��ł��B
���̃`�F�[���̓��\�b�h�`�F�[����ӎ����č���܂����B
���\�b�h�`�F�[������֗��ȓ_�́A���\�b�h�̎�s���\��������Ă��邽�߂ɁA���̃f�[�^�ƘA�g���₷���_�ł��B
my
$result
=
$book_list
->run_methods(
find
=> [
'author'
=>
'kimoto'
],
sort
=> [
'price'
,
'desc'
],
'get_result'
);
6-8 �����̃t�B�[���h�̒l��t�B���^����B filter_values
�����̃t�B�[���h�̒l��ʂ̒l�ɕϊ��������Ƃ��́Afilter_values��g�p���܂��B
$book
->filter_valuse(
sub
{
uc
},
qw/title, author/
);
���̂悤�ɋL�q����ƁAtitle �� author �̃t�B�[���h�̒l���啶���ɕϊ�����܂��B
���̃��\�b�h�̂��ЂƂ‚̓���Ƃ��āA�t�B�[���h�̒l���z����ꍇ�͂��̒l�� ���ׂĂ�ϊ����Ă���Ƃ�����̂�����܂��B
�܂��t�B�[���h�̒l���n�b�V��������ꍇ�ɁA�n�b�V���̒l�̂��ׂĂ�ϊ����Ă���܂��B
���Ƃ��Ώ�L�̂悤�ȃt�B�[���h�ł�����ꍇ�́A
$book
->filter_values(
sub
{
uc
},
qw/title author/
);
�Ƃ���ƁA�z��̑S���̒l�ƁA�n�b�V���̑S���̒l���啶���ɕϊ�����܂��B
6-9 �����̃t�B�[���h�̒l��G���R�[�h�A�܂��̓f�R�[�h����B encode_values, decode_values
��L�́Afilter_values ��encode��, decode����K�p������̂��A�p�ӂ���Ă��܂��B
$book
->encode_values(
'utf8'
,
q/title author/
);
$book
->decode_values(
'utf8'
,
q/title author/
);
�̂悤�Ɏg�p���܂��B
6-9 XML����I�u�W�F�N�g������B new_from_xml
XML����I�u�W�F�N�g�������邱�Ƃ�ł��܂��B
�ȉ���XML��Ă��������B�܂�ŃI�u�W�F�N�g�̂悤��XML�ł��B
<?xml version=
"1.0"
encoding=
'UTF-8'
?>
<root __CLASS=
"Book"
>
<title>Good man</title>
<author __CLASS=
"Person"
>
<name>Kimoto</name>
<age>28</age>
<country>Japan</country>
</author>
</root>
�N���X���̕\����
__CLASS=
"Book"
�Ƃ�����̂��g���Ă��܂��B
my
$book
= Simo->new_from_xml(
$xml
);
�Ƃ����L�q�ł��̂悤��XML���͂��āA�I�u�W�F�N�g�����邱�Ƃ��ł��܂��B
$book
->author->name;
�̂悤�ɐ[���K�w�̃I�u�W�F�N�g�������ꗘ�p�ł��܂��B
�R���X�g���N�^����new�ł͂Ȃ��ꍇ�́A
<root __CLASS=
"Book"
__CLASS_CONSTRUCTOR=
"create"
>
</root>
�̂悤�ɁA__CLASS__CONSTRUCTOR �� �R���X�g���N�^����w�肵�Ă��������B
6-10 XML��ɃI�u�W�F�N�g�̃t�B�[���h�l��ݒ肷��B set_values_from_xml
�g����́Anew_from_xml �Ƃ悭���Ă��܂��B
Book�I�u�W�F�N�g�͍쐬����Ă��āA ���L�̂悤�ȃf�[�^��I�u�W�F�N�g�ɐݒ肵�����ꍇ�ȂǂɎg�p���܂��B
<?xml version=
"1.0"
encoding=
'UTF-8'
?>
<root>
<title>Good man</title>
<author __CLASS=
"Person"
>
<name>Kimoto</name>
<age>28</age>
<country>Japan</country>
</author>
</root>
�ȉ����T���v���ł��B
my
$book
= Book->new;
$book
->set_values_from_xml(
$xml
);
7. �Ō��
�Ō�܂œǂ�ł���Ă��肪�Ƃ��������܂��B