camel

��ϥ�����ޤȤ��Τ������ä��餤�Ǥ�����Perl 5����ǰ��ֹ����ʴؿ���tie()���ä��ꤷ�ޤ���

tie�ؿ��Ȥ� - ��������
����ȡ�΢�ǽ�����ư�������֥������Ȥ򥳥󥹥ȥ饯�Ȥ����ꡢ�Ȥ��������̤����ȤǤ����ꡢ����������Τ��б�������Τ��Ǽ���褿�ꤹ�롣

�Ȥ����櫓�ǡ�tie()�ˤĤ��Ƹ�äƤ������Ȥˤ��ޤ��礦��

tie()�ȤϤʤˤ�?

���Фꡢ�֥��֥������ȤǤϤʤ���perl���Ȥ߹��ߥǡ��������פ�΢�ǥ��֥������Ȳ�������ȤߡפΤ��ȤǤ������줬�ʤ�tie�ȸƤФ�뤫�ȸ����С��ѿ�����ꤵ�줿���饹�˷�ӤĤ��뤫�顢�Ǥ���

�����ڵ򡢼ºݤ˸��Ƥߤޤ��礦��

use strict;
use warnings;
{
    package MyScalar;
    use Carp;
    sub TIESCALAR {
        my $pkg = shift;
        carp "TIESCALAR('$pkg')";
        bless \do { my $scalar }, $pkg;
    }
    sub FETCH($) {
        my $this = shift;
        carp "FETCH($this)";
        return $$this;
    }
    sub STORE($$) {
        my ( $this, $value ) = @_;
        carp "STORE($this, $value)";
        $$this = $value;
    }
    sub DESTROY {
        my $this = shift;
        carp "DESTROY($this)";
    }
}

{
    tie my $scalar, 'MyScalar';
    $scalar = 1;
    print $scalar, "\n";
    $scalar++;
    print $scalar, "\n";
    print 'tied($scalar) = ', tied($scalar), "\n";
    tied($scalar)->STORE(3);
    print $scalar, "\n";
}

CodePad��ư���������Τǡ������Ǥ�Ʊ��ե�������MyScalar�ѥå�������������Ƥ��ޤ�....�Ȼפäƺ�CodePad�򸫤��������[���褷���Τǥ���ɲ�]���ʤΤǰʾ�ϳƼ��¹Ԥ��Ƥ�������������ʴ����ˤʤä��Ȼפ��ޤ���

[Run via codepad]
TIESCALAR('MyScalar') at tiescalar.pl line 28
STORE(MyScalar=SCALAR(0x181c290), 1) at tiescalar.pl line 29
FETCH(MyScalar=SCALAR(0x181c290)) at tiescalar.pl line 30
1
FETCH(MyScalar=SCALAR(0x181c290)) at tiescalar.pl line 31
STORE(MyScalar=SCALAR(0x181c290), 2) at tiescalar.pl line 31
FETCH(MyScalar=SCALAR(0x181c290)) at tiescalar.pl line 32
2
tied($scalar) = MyScalar=SCALAR(0x181c290)
STORE(MyScalar=SCALAR(0x181c290), 3) at tiescalar.pl line 34
FETCH(MyScalar=SCALAR(0x181c290)) at tiescalar.pl line 35
3
DESTROY(MyScalar=SCALAR(0x181c290)) at tiescalar.pl line 0

���Τ��Ȥ��顢�ʲ��Τ��Ȥ��狼��ޤ���

  • tie my $scalar, 'MyScalar'�ϡ�TIESCALAR('MyScalar')��¹Ԥ���
  • $scalar���ͤ˥�����������ȡ�MyScalar::FETCH()���¹Ԥ����
    • tied($scalar)->FETCH()��Ʊ��
  • $scalar����������ȡ�MyScalar::STORE()���¹Ԥ����
    • $scalar = $value����tied($scalar)->STORE($value)��Ʊ��
  • �������פ�ȴ�����Ȥ����ǡ�MyScalar::DESTROY()���¹Ԥ����

�פ���ˡ�tie()���줿�ѿ����Ф����������֥������Ȥ��Ф���᥽�åɸƤӽФ����Ѵ������ΤǤ���

Scalar�ξ�硢��Ǹ����̤�ʤ��ʤ�����ץ�Ǥ��������줬Array��Hash��File Handle�Ȥʤ�ȡ��⤦�����������ͤФʤ�ʤ��᥽�åɤ������ޤ��������ͤ�����Ʊ���Ǥ����ޤ���Perl 5�ˤ�Tie::Scalar, Tie::Array, Tie::Hash, ������ Tie::Handle�Ȥ����١������饹�����Ǥ��Ѱդ���Ƥ���Τǡ�������Ѿ������ɬ�פʥ᥽�åɤ����򼫺�Ƴڤ򤹤뤳�Ȥ����ޤ���

�Ȥ�������Damian�����Ϥ���tie���������ʤΤǤ���

"Perl Best Practices" P.451

Don't tie variables or filehandles.
�ѿ���ե�����ϥ�ɥ��tie()�����

�Τ��ˡ�Perl 5�Υ��֥������Ȼظ����ΤäƤ���С��虜�虜tie()��𤵤��Ȥ�ľ�˥��֥������Ȥ�Ȥ��Ф����櫓�Ǥ����ºݤ���������®�Ǥ⤢��ޤ���

��������tie()�����뤪�����ǡ�Perl 4�����Τ�ʤ��ͤǤ�Perl 5�Υ��֥������ȤΥѥ�����Ѥ��뤳�Ȥ�����ޤ�����Perl 5�ˤ��Ȥ߹��ޤ�Ƥ��ʤ���ǽ�����Ω���ʤ��פ褦�˼������뤳�Ȥ��ǽ�ˤʤäƤ��ޤ���

���⤽�⤽������DCONWAY�������ȡ�tie��Ȥ��⥸�塼��򤤤��Ĥ�Ĥ��äƤޤ��� Readonly�ʤ󤫤���ŵ���Ǥ���Tie���餤��DCONWAY������Tie��Readonly��������ơ�Tie�����ʤ�Attribute::Constant��tie�����λ䤬��������ʤ�Ƥʤ󤿤������Ǥ��礦���ͤ���

tie�ϡ�OO���Τ�ʤ��ץ�����ߥ󥰽鿴�ԤˤȤä�Use���٤���ΤǤ���Τ�Ʊ���ˡ�OO�򽬤���Τˤ�(perl�˸¤餺!)�湥�ζ���Ǥ����ȼ���Tie�⥸�塼�������Ǥ���С�Perl 5��OO�Ϥۤ��ȵ������Ȥ��äƤ�褤���餤��

�ߤʤ���⡢��ä�tie����Ѥ��Ƥߤޤ��礦��Perl�ʳ��ˤ���¿�ˤʤ���ǽ�Ǥ������ۤ�ȡ������������Ǥ��衣�������Ȥ�������м��켫���ˤϤʤ�ޤ�����

Dan the Perl Monger

See Also: