The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
=head1 NAME

Pogo - Perl GOODS interface

=head1 SYNOPSIS

  use Pogo;

  $pogo = new Pogo 'sample.cfg';  # ¥Ç¡¼¥¿¥Ù¡¼¥¹¤ËÀܳ
  $root = $pogo->root_tie;        # ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Îroot¥Ï¥Ã¥·¥å¤Ø¤Î»²¾È¤òÆÀ¤ë
  
  $root->{key1} = "string";       # ʸ»úÎó¤ò¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ
  $value = $root->{key1};         # $value ¤Ï "string"
  
  $root->{key2} = [1,2,3];        # ÇÛÎó¤ò¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ
  $arrayref = $root->{key1};      # ¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤ÎÇÛÎó¤Ø¤Î»²¾È¤òÆÀ¤ë
  $value = $root->{key2}->[0];    # $value ¤Ï 1
  
  $root->{key3} = {a=>1,b=>2};    # ¥Ï¥Ã¥·¥å¤ò¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ
  $hashref = $root->{key3};       # ¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Î¥Ï¥Ã¥·¥å¤Ø¤Î»²¾È¤òÆÀ¤ë
  $value = $root->{key3}->{b};    # $value ¤Ï 2
  
  $root->{key4} = new Pogo::Btree;# B¥Ä¥ê¡¼¥Ï¥Ã¥·¥å¤òºî¤ë
  $hashref = $root->{key5};       # B¥Ä¥ê¡¼¤Ï¥Ï¥Ã¥·¥å¤È¤·¤Æ¥¢¥¯¥»¥¹¤Ç¤­¤ë
  
  $root->{key5} = new Pogo::Htree;# H¥Ä¥ê¡¼¥Ï¥Ã¥·¥å¤òºî¤ë
  $hashref = $root->{key6};       # H¥Ä¥ê¡¼¤Ï¥Ï¥Ã¥·¥å¤È¤·¤Æ¥¢¥¯¥»¥¹¤Ç¤­¤ë
  
  $root->{key6} = new Aclass;     # ¥ª¥Ö¥¸¥§¥¯¥È¤ò¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ
  $obj = $root->{key4};           # $obj ¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Î Aclass ¥ª¥Ö¥¸¥§¥¯¥È


=head1 DESCRIPTION

=head2 ³µÍ×

Pogo ¤Ï GOODS (Generic Object Oriented Database System)¤Î Perl ¥¤¥ó¥¿ 
¡¼¥Õ¥§¡¼¥¹¤Ç¤¹¡£Pogo ¤Ï Perl ¤Î¥¹¥«¥é¤äÇÛÎó¤ä¥Ï¥Ã¥·¥å¤ä¥ª¥Ö¥¸¥§¥¯¥È¤ò 
¥À¥¤¥ì¥¯¥È¤Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤ËÂбþ¤Å¤±¤Þ¤¹¡£Pogo ¤Ë¤Ï¼¡¤Î¥Ç¡¼ 
¥¿¥¿¥¤¥×¤¬¤¢¤ê¤Þ¤¹¡£

  - ¥¹¥«¥é¡¼
  - ÇÛÎó
  - ¥Ï¥Ã¥·¥å
  - H¥Ä¥ê¡¼ (¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤¬B¥Ä¥ê¡¼¤È¤Ê¤Ã¤Æ¤¤¤ë¥Ï¥Ã¥·¥å)
  - B¥Ä¥ê¡¼
  - N¥Ä¥ê¡¼¡Ê¥­¡¼¤¬À°¿ôÃͤÎB¥Ä¥ê¡¼¡Ë

¥¹¥«¥é¡¼¥Ç¡¼¥¿¤ä½¸¹ç¥¿¥¤¥×¥Ç¡¼¥¿¤ÎÍ×ÁǤÎÃͤϡ¢Ê¸»úÎ󤫡¢Â¾¤Î¥Ç¡¼¥¿¤Ø¤Î
»²¾È¤Ç¤¹¡£Pogo ¤Ï Perl ¤Î tie ¤Î»ÅÁȤߤòÍøÍѤ·¤Æ¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Î±Ê³¥Ç
¡¼¥¿¤Ø¤ÎÆ©²áŪ¤Ê¥¢¥¯¥»¥¹ÊýË¡¤òÄ󶡤·¤Þ¤¹¡£¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Î³Æ¥Ç¡¼¥¿¤ÏÆâ
ÉôŪ¤Ë¥¯¥é¥¹Ì¾¤ò»ý¤Æ¤ë¤Î¤Ç¡¢Perl ¤Î¥ª¥Ö¥¸¥§¥¯¥È¡Ê¤Ä¤Þ¤ê¥¯¥é¥¹Ì¾¤Ç     
bless ¤µ¤ì¤¿»²¾È¡Ë¤ò¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Ë³ÊǼ¤Ç¤­¤Þ¤¹¡£

=head2 GOODS ¥µ¡¼¥Ð¡¼

Pogo ¤Î¥Ù¡¼¥¹¤È¤Ê¤Ã¤Æ¤¤¤ë GOODS ¤Ï¡¢¥¯¥é¥¤¥¢¥ó¥È¥µ¡¼¥Ð¡¼·¿¤Î¥Ç¡¼¥¿¥Ù¡¼
¥¹¤Ç¤¹¡£Pogo ¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Ï¡¢Æ±¤¸¥Þ¥·¥ó¾å¤« TCP/IP ¤Ç¤Ä¤Ê¤¬¤Ã¤¿ 
¾¤Î¥Þ¥·¥ó¾å¤ÇÆ°ºîÃæ¤Î¡¢GOODS ¥µ¡¼¥Ð¡¼¥×¥í¥»¥¹¤òɬÍפȤ·¤Þ¤¹¡£GOODS ¥µ
¡¼¥Ð¡¼¤Î¥×¥í¥°¥é¥à¤Ï¡Ögoodsrv¡×¤È¤¤¤¦Ì¾Á°¤Ç¡¢/usr/local/goods/bin/ ¤Ë 
¥¤¥ó¥¹¥È¡¼¥ë¤µ¤ì¤Þ¤¹¡£Pogo ¤Î¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤È¤½¤ì¤ËÂбþ¤¹¤ë goodsrv 
¤Ï¤ª¸ß¤¤¤ËÄÌ¿®¤¹¤ë¤¿¤á¤ËƱ¤¸ TCP ¥Ý¡¼¥È¤ò»È¤¦É¬Íפ¬¤¢¤ê¤Þ¤¹¡£¤½¤Î¤¿¤á 
¤Ëξ¼Ô¤Ï¡¢goodsrv ¤Î¥Û¥¹¥È̾¤È TCP ¥Ý¡¼¥ÈÈÖ¹æ¤òµ­ºÜ¤·¤¿Æ±¤¸ÀßÄê¥Õ¥¡¥¤ 
¥ë¤ò»²¾È¤·¤Þ¤¹¡£ÀßÄê¥Õ¥¡¥¤¥ë¤Ï¡Ö.cfg¡×¤Î³ÈÄ¥»Ò¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£¥í
¡¼¥«¥ë¥Þ¥·¥ó¾å¤Î goodsrv ¤ËÂФ¹¤ëŵ·¿Åª¤ÊÀßÄê¥Õ¥¡¥¤¥ë¤Ï¼¡¤Î¤è¤¦¤ÊÆâÍÆ 
¤Ë¤Ê¤ê¤Þ¤¹¡£

  1
  0: localhost:6100

£±¹ÔÌܤΡÖ1¡×¤Ï¤³¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤¬°ì¤Ä¤Î goodsrv ¤ò»È¤¦¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹
¡ÊÆó¤Ä°Ê¾å»È¤¦¤³¤È¤â²Äǽ¤Ç¤¹¤¬ Pogo ¤Ç¤Ï°ì¤Ä¤·¤«»È¤¤¤Þ¤»¤ó¡Ë¡£Æó¹ÔÌܤÎ
¡Ö0: localhost:6100¡×¤Ï¡¢°ì¤ÄÌܤΠgoodsrv ¤¬¡¢localhost ¤Ë¤¢¤Ã¤Æ¡¢¥Ý¡¼
¥ÈÈÖ¹æ6100¤ò»È¤¦¤³¤È¤ò°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£

¤³¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤¬¡¢¡Ötest.cfg¡×¤È¤·¤Æºî¤é¤ì¤Æ¤¤¤ë¤Ê¤é¤Ð¡¢goodsrv¤Ï¼¡¤Î¤è¤¦¤Ëµ¯Æ°¤Ç¤­¤Þ¤¹¡£

  goodsrv test

¤¹¤ë¤È¡¢goodsrv ¤Ï¼¡¤Ë¼¨¤¹°ìÁȤΥǡ¼¥¿¥Ù¡¼¥¹¥Õ¥¡¥¤¥ë¤òºîÀ®¤·¤Þ¤¹¡£¤³¤ì
¤é¤Î¥Õ¥¡¥¤¥ë¤òºï½ü¤·¤¿¤êľÀÜÊÔ½¸¤·¤¿¤ê¤ÏÀäÂФˤ·¤Ê¤¤¤Ç¤¯¤À¤µ¤¤¡£

  test.his
  test.idx
  test.log
  test.map
  test.odb

µ¯Æ°¤·¤¿ goodsrv ¤Ï¥³¥ó¥½¡¼¥ë¤«¤é¤Î¥³¥Þ¥ó¥ÉÆþÎϤòÂÔ¤Á¤Ä¤Ä¡¢»ØÄꤵ¤ì¤¿ 
TCP ¥Ý¡¼¥È¤òÄ̤¸¤Æ¥Ç¡¼¥¿¥Ù¡¼¥¹¥µ¡¼¥Ó¥¹¤òÄ󶡤·¤Þ¤¹¡£¥³¥Þ¥ó¥É¤Ë¤è¤Ã¤Æ¡¢
¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎÅý·×¾ðÊó¤ò¸«¤¿¤ê¡¢¥Ð¥Ã¥¯¥¢¥Ã¥×¤ò¼è¤Ã¤¿¤ê¤Ç¤­¤Þ¤¹¡£GOODS 
¤Î readme.htm ¤ò»²¾È¤·¤Æ¤¯¤À¤µ¤¤¡£

¼ÂÍѾå¤Ï¡¢goodsrv ¤Ï¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¥×¥í¥»¥¹¤È¤·¤Æµ¯Æ°¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ë
¤Ç¤·¤ç¤¦¡£Pogo ¤Ï¡¢goodsrv ¤ò¥Ð¥Ã¥¯¥°¥é¥¦¥ó¥É¤Çµ¯Æ°¤¹¤ë¤¿¤á¤È¡¢¤½¤Î   
goodsrv ¤Ë¥³¥Þ¥ó¥É¤òÁ÷¤ë¤¿¤á¤Î¡¢Æó¤Ä¤Î¥æ¡¼¥Æ¥£¥ê¥Æ¥£¡¼¥¹¥¯¥ê¥×¥È¤òÍÑ°Õ
¤·¤Æ¤¤¤Þ¤¹¡£goodsrv ¤ò¡¢test.cfg ¤Ë½¾¤Ã¤Æµ¯Æ°¤¹¤ë¤Ë¤Ï¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£

  startgoodsrv test &

¤³¤Î¾ì¹ç¡¢goodsrv¤Î²èÌ̽ÐÎϤÏtest.goodsrv.log¤ËÊݸ¤µ¤ì¤Þ¤¹¡£
goodsrv¤ò½ªÎ»¤¹¤ë¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£

  cmdgoodsrv test exit

=head2 tie¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹

=over 4

=item B<Àܳ>

¤Þ¤ººÇ½é¤Ë¡¢¼Â¹ÔÃæ¤ÎGOODS¥µ¡¼¥Ð¡¼¤ËÀܳ¤·¤Þ¤¹¡£

  $pogo = new Pogo $cfgfilename;

$cfgfilename ¤Ï GOODS ¥µ¡¼¥Ð¡¼¤ò»ØÄꤹ¤ëÀßÄê¥Õ¥¡¥¤¥ë̾¤Ç¤¹¡£¤³¤ì¤ÇÆÀ¤é
¤ì¤¿ Pogo ¥ª¥Ö¥¸¥§¥¯¥È¤Ï°Ê²¼¤Ç»ÈÍѤ·¤Þ¤¹¡£

=item B<¥ë¡¼¥È¤òÆÀ¤ë>

¼¡¤Ë¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Î¥ë¡¼¥ÈB¥Ä¥ê¡¼¤Ø¤Î»²¾È¤òÆÀ¤Þ¤¹¡£

  $root = $pogo->root_tie;

¥Î¡¼¥È¡§GOODS ¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Î±Ê³¥Ç¡¼¥¿¤Ï¡¢É¬¤ºÂ¾¤Î±Ê³¥Ç¡¼¥¿¤«¤é»²¾È
¤µ¤ì¤Æ¤¤¤Ê¤¯¤Æ¤Ï¤Ê¤ê¤Þ¤»¤ó¡£¤â¤·¤¢¤ë¥Ç¡¼¥¿¤¬¤É¤Î±Ê³¥Ç¡¼¥¿¤«¤é¤â»²¾È¤µ
¤ì¤Ê¤¯¤Ê¤ë¤È¡¢¤½¤Î¥Ç¡¼¥¿¤Ï GOODS ¤Î¥¬¥Ù¡¼¥¸¥³¥ì¥¯¥·¥ç¥ó¥·¥¹¥Æ¥à¤Ë¤è¤Ã 
¤Æ²ó¼ý¤µ¤ì¤Þ¤¹¡£¤³¤Î¤³¤È¤«¤é¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¤Ï¾¯¤Ê¤¯¤È¤â°ì¤Ä¤Ï¡¢ÀäÂÐŪ
¤Ê±Ê³¥Ç¡¼¥¿¤¬¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¤½¤ì¤¬¥ë¡¼¥È¤È¸Æ¤Ð
¤ì¤ë¥Ç¡¼¥¿¤Ç¤¹¡£Pogo ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥ë¡¼¥È¤Ï B ¥Ä¥ê¡¼¥Ç¡¼¥¿¤Ç¤¹¡£      
root_tie ¥á¥½¥Ã¥É¤Ï¡¢¤³¤Î¥ë¡¼¥È B ¥Ä¥ê¡¼¥Ç¡¼¥¿¤Ø¤Î»²¾È¤òÊÖ¤·¤Þ¤¹¡£

=item B<ʸ»úÎó¤È¿ôÃÍ>

¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥Ç¡¼¥¿¤ò³ÊǼ¤¹¤ë¤Ë¤Ï¡¢Ã±¤Ë Perl ¤Î¥Ç¡¼¥¿¤ò $root ¤òÄ̤¸ 
¤ÆÂåÆþ¤¹¤ë¤À¤±¤Ç¤¹¡£$root ¤Ï¥Ï¥Ã¥·¥å»²¾È¤Ç¤¢¤ë¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£

  $root->{key} = "value";
  $root->{pi} = 3.14;

¥Î¡¼¥È¡§Pogo ¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ç¤Ï¡¢¥Ç¡¼¥¿ÃÍʸ»úÎó¤Ë¤Ï¥Ì¥ëʸ»ú¡Ê"\x00"¡Ë¤ò 
´Þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤¹¤¬¡¢¥Ï¥Ã¥·¥å¥­¡¼Ê¸»úÎó¤Ë¤Ï´Þ¤à¤³¤È¤¬¤Ç¤­¤Þ¤»¤ó¡£

¥Î¡¼¥È¡§¿ôÃÍ3.14¤Ïʸ»úÎó"3.14"¤È¤·¤Æ³ÊǼ¤µ¤ì¤Þ¤¹¡£¤³¤Î¥Ç¡¼¥¿ÊÑ´¹¤Ï¥ª¡¼
¥Ð¡¼¥Ø¥Ã¥É¤Ç¤¹¤Î¤Ç¡¢¾­Íè¤Î Pogo ¤Ç¤ÏľÀÜ¿ôÃͤȤ·¤Æ³ÊǼ¤¹¤ë¤è¤¦¤Ë¤Ê¤ë¤Ç
¤·¤ç¤¦¡£

¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥Ç¡¼¥¿¤ò³ÊǼ¤·¤¿¤é¡¢¤½¤ì¤ò¼è¤ê½Ð¤¹¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

  $value = $root->{key};  # $value ¤Ï "value"
  $pi = $root->{pi};      # $pi ¤Ï "3.14"

=item B<ÇÛÎó¤È¥Ï¥Ã¥·¥å>

ÇÛÎó¤ä¥Ï¥Ã¥·¥å¤ò³ÊǼ¤¹¤ë¤Ë¤Ï¡¢»²¾È¤òÂåÆþ¤·¤Þ¤¹¡£

  $root->{key1} = \@array;
  $root->{key2} = [1,2,3];
  $root->{key3} = \%hash;
  $root->{key4} = {a=>1,b=>2,c=>3};
  $root->{key5} = {a=>[1,2],b=>{c=>3,d=>4}};

¤³¤ÎÂåÆþ¤Ï¡¢»²¾È¤À¤±¤ò³ÊǼ¤¹¤ë¤Î¤Ç¤Ï¤Ê¤¯¡¢¤½¤ÎÇÛÎó¤ä¥Ï¥Ã¥·¥å¤ÎÃæÌ£¤â¥Ç
¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤µ¤ì¤ë¤È¤¤¤¦¤³¤È¤ËÃí°Õ¤·¤Æ¤¯¤À¤µ¤¤¡£¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Î±Ê
³¥Ç¡¼¥¿¤Ï¡¢Èó±Ê³¡Ê¤Ä¤Þ¤ê¥á¥â¥ê¾å¤Î¡Ë¥Ç¡¼¥¿¤ò»²¾È¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó
¤Î¤Ç¡£¤Ä¤Þ¤ê¡¢ÇÛÎó¤ä¥Ï¥Ã¥·¥å¤Î¥³¥Ô¡¼¤¬¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Ëºî¤é¤ì¤Æ¤½¤Î»²¾È
¤¬ÂåÆþ¤µ¤ì¤ë¤³¤È¤Ë¤Ê¤ë¤ï¤±¤Ç¤¹¡£¾å¤ÎÎã¤Ç¸À¤¨¤Ð¡¢ÂåÆþ¸å¤Ë@array ¤ä %   
hash ¤òÊѹ¹¤·¤Æ¤â¡¢$root->{key1}¤ÎÇÛÎó¤ä $root->{key3}¤Î¥Ï¥Ã¥·¥å¤¬Êѹ¹
¤µ¤ì¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£

³ÊǼ¤·¤¿ÃͤòÆÀ¤ë¤Ë¤Ï¡¢ÉáÄÌ¤Ë ->[] ¤ä ->{} ¤Îµ­Ë¡¤ò»È¤¦¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£

  $value = $root->{key5}->{a}->[1];  # $value ¤Ï 2
  $value = $root->{key5}{a}[1];      # {} ¤ä [] ¤Î´Ö¤Î -> ¤Ï¾Êά²Äǽ

¤â¤·»ØÄꤷ¤¿Ãͤ¬¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤ÎÊ̤Υǡ¼¥¿¤Ø¤Î»²¾È¤Ç¤¢¤Ã¤¿¾ì¹ç¤Ï¡¢Á³¤ë
¤Ù¤­·¿¤Î»²¾È¤¬ÆÀ¤é¤ì¤Þ¤¹¡£¤½¤Î»²¾È¤Ï¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥Ç¡¼¥¿¤ò³ÊǼ¤·¤¿¤ê
ÆÀ¤¿¤ê¤¹¤ë¤Î¤Ë»È¤¨¤Þ¤¹¡£

  $hashref = $root->{key4};     # ¥Ï¥Ã¥·¥å»²¾È¤òÆÀ¤ë
  $hashref->{d} = 4;            # ¥Ç¡¼¥¿¤ò³ÊǼ¤¹¤ë
  $value = $hashref->{c};       # $value ¤Ï 3

¥Î¡¼¥È¡§CODE¤ÈIO¤Î»²¾È¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£

=item B<ÇÛÎó¤Î¥µ¥¤¥º>

Pogo ¤ÎÇÛÎó¤ÏɬÍפʤȤ­¤Ë¼«Æ°Åª¤ËÂ礭¤¯¤Ê¤ê¤Þ¤¹¡£¤·¤«¤·¡¢¤³¤ì¤Ï¥Ç¡¼¥¿ 
¥Ù¡¼¥¹Æâ¤Î¥Ç¡¼¥¿¤ÎºÆÇÛÃÖ¤ò¤È¤â¤Ê¤¤¤Þ¤¹¡£ÇÛÎ󻲾Ȥ¬ÂåÆþ¤µ¤ì¤¿¤È¤­¤Ë¤Ï¡¢
¤½¤ÎÇÛÎó¤Î¥µ¥¤¥º¤ËÀßÄꤵ¤ì¤Þ¤¹¤¬¡¢¤â¤·ºÇÂ祵¥¤¥º¤¬¸«ÀѤâ¤ì¤ë¤Ê¤é¡¢¤¢¤é
¤«¤¸¤á¥µ¥¤¥º¤òÀßÄꤷ¤Æ¤ª¤¯¤³¤È¤ò¤ª´«¤á¤·¤Þ¤¹¡£¥µ¥¤¥º¤ò»ØÄꤷ¤ÆÇÛÎó¤òºî
¤ë¤Ë¤Ï¡¢Pogo::Array::new ¥á¥½¥Ã¥É¤ò»È¤¤¤Þ¤¹¡£

  $root->{sqrt} = new Pogo::Array 1000;
  for(0..999) { $root->{sqrt}->[$_] = sqrt $_; }

=item B<¥Ï¥Ã¥·¥å¤Î¥µ¥¤¥º>

Pogo ¤Î¥Ï¥Ã¥·¥å¤Ï¡¢¸ÇÄꥵ¥¤¥º¤Î¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤ò»ý¤Á¡¢¤½¤Î¥µ¥¤¥º¤ò 
Êѹ¹¤¹¤ë¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î¥µ¥¤¥º¤Ï¡¢³ÊǼ¤Ç¤­¤ë¥­¡¼
¤Î¿ô¤òÀ©¸Â¤¹¤ë¤ï¤±¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¤¬¡¢¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î¥µ¥¤¥º¤ËÂФ·¤Æ
¿¤¹¤®¤ë¥­¡¼¤ò³ÊǼ¤¹¤ë¤ÈÃÙ¤¯¤Ê¤ê¤Þ¤¹¡£¤Ç¤¹¤«¤é¡¢¥Ï¥Ã¥·¥å¤ÎÍÑÅӤ˱þ¤¸¤Æ
ŬÀڤʥϥ工奨¥ó¥È¥êɽ¤Î¥µ¥¤¥º¤òÁª¤Ö¤³¤È¤¬É¬ÍפǤ¹¡£¡Ê¾­Íè¤Î Pogo ¤Ç
¤Ï¼«Æ°Åª¤Ê¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î¥µ¥¤¥º³ÈÄ¥¤¬¥µ¥Ý¡¼¥È¤µ¤ì¤ë¤è¤¦¤Ë¤Ê¤ë¤Ç¤·
¤ç¤¦¡£¡Ë¥Ï¥Ã¥·¥å»²¾È¤¬ÂåÆþ¤µ¤ì¤ë¤È¤­¤Ë¤Ï¡¢¤½¤Î¥Ï¥Ã¥·¥å¤ÈƱ¤¸¥Ï¥Ã¥·¥å¥¨
¥ó¥È¥êɽ¤Î¥µ¥¤¥º¤¬ÀßÄꤵ¤ì¤Þ¤¹¡£¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î¥µ¥¤¥º¤ò»ØÄꤷ¤Æ¥Ï
¥Ã¥·¥å¤òºî¤ë¤Ë¤Ï¡¢Pogo::Hash::new ¥á¥½¥Ã¥É¤ò»È¤¤¤Þ¤¹¡£

  $root->{smallhash} = new Pogo::Hash 8;
  $root->{largehash} = new Pogo::Hash 1024;

¥µ¥¤¥º¤ò¾Êά¤¹¤ë¤È¡¢256¤Ë¤Ê¤ê¤Þ¤¹¡£

=item B<H¥Ä¥ê¡¼>

Pogo ¤Î¥Ï¥Ã¥·¥å¤Î¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Ï¸ÇÄꥵ¥¤¥º¤ÎÇÛÎó¤Ê¤Î¤Ç¡¢¤¢¤Þ¤êÂç 
¤­¤Ê¥µ¥¤¥º¤Î¥Ï¥Ã¥·¥å¤Ï¼ÂÍÑŪ¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤â¤·Èó¾ï¤ËÂ礭¤Ê¥Ï¥Ã¥·¥å¤¬
ɬÍפʤ顢H ¥Ä¥ê¡¼¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£H ¥Ä¥ê¡¼¤Î¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Ï B  
¥Ä¥ê¡¼¤Ë¤Ê¤Ã¤Æ¤¤¤ë¤Î¤Ç¡¢µðÂç¤Ê¥µ¥¤¥º¤¬²Äǽ¤Ç¤¹¡£¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î¥µ
¥¤¥º¤ò»ØÄꤷ¤Æ H ¥Ä¥ê¡¼¤òºî¤ë¤Ë¤Ï¡¢Pogo::Htree::new ¥á¥½¥Ã¥É¤ò»È¤¤¤Þ¤¹¡£

  $root->{hugehash} = new Pogo::Htree 131072;

¥µ¥¤¥º¤ò¾Êά¤¹¤ë¤È¡¢65536¤Ë¤Ê¤ê¤Þ¤¹¡£

=item B<B¥Ä¥ê¡¼>

¤â¤¦¤Ò¤È¤Ä¤ÎµðÂç¥Ï¥Ã¥·¥å¤òºî¤ëÊýË¡¤Ï¡¢B ¥Ä¥ê¡¼¤Ç¤¹¡£B ¥Ä¥ê¡¼¤Ç¤Ï¡¢¥Ï¥Ã
¥·¥å¤Î¥­¡¼¼«ÂΤ¬ B ¥Ä¥ê¡¼¤Î¥­¡¼¤È¤Ê¤ê¤Þ¤¹¡£¤½¤Î¤¿¤á¤Ë¥­¡¼¤Ï¼«Æ°Åª¤ËÀ° 
Î󤵤ì¤ë¤³¤È¤Ë¤Ê¤ê¤Þ¤¹¡£¤Þ¤¿¡¢¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î¥µ¥¤¥º¤Î¥µ¥¤¥º¤ÎÌäÂê
¤Ï¤¢¤ê¤Þ¤»¤ó¡£¤½¤Î°ìÊý¤Ç¡¢Pogo ¤Î B ¥Ä¥ê¡¼¤Î¥­¡¼º÷°ú¤Ï¥­¡¼Ê¸»úÎó¤ÎÀèƬ
8¥Ð¥¤¥È¤«¤éºî¤é¤ì¤ë¤¿¤á¡¢¤â¤·Â¿¤¯¤Î¥­¡¼¤¬ÀèƬ8¥Ð¥¤¥È¤¬Æ±¤¸¤Ç¤¢¤ë¤È¡¢¤½
¤Î¥­¡¼¤Î¸¡º÷¤ÏÃÙ¤¯¤Ê¤ê¤Þ¤¹¡£B ¥Ä¥ê¡¼¤òºî¤ë¤Ë¤Ï¡¢Pogo::Btree::new ¥á¥½ 
¥Ã¥É¤ò»È¤¤¤Þ¤¹¡£

  $root->{btree} = new Pogo::Btree;

¥µ¥¤¥º¤Î»ØÄê¤ÏɬÍפ¢¤ê¤Þ¤»¤ó¡£

tie ¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹¤Ç¤Ï¡¢¤¢¤ëʸ»úÎó¤ËÉôʬ°ìÃפ¹¤ë¥Ï¥Ã¥·¥å¥­¡¼¤òõ¤¹¤È
¤¤¤¦¤³¤È¤Ï¤Ç¤­¤Þ¤»¤ó¡£¤½¤ì¤Ë¤Ï¡¢Pogo::tied_object ¤È Pogo::Btree::find
_key ¤ò»È¤¤¤Þ¤¹¡£

  $foundkey = Pogo::tied_object($root->{btree})->find_key($string);

Pogo::tied_object ¤Ï¡¢¥Ç¡¼¥¿¤Î»²¾ÈÀè¤Ë tie ¤µ¤ì¤¿±£¤ì¤¿¥ª¥Ö¥¸¥§¥¯¥È¤ò 
ÊÖ¤·¤Þ¤¹¡£$root->{btree}¤¬ B ¥Ä¥ê¡¼¤Ç¤¢¤ì¤Ð¡¢Pogo::tied_object($root->
{btree}) ¤Ï Pogo::Btree ¥ª¥Ö¥¸¥§¥¯¥È¤Ë¤Ê¤ê¤Þ¤¹¡£¤½¤·¤Æ¡¢Pogo::Btree:: 
find_key ¥á¥½¥Ã¥É¤Ï¡¢»ØÄꤵ¤ì¤¿Ê¸»úÎó¤ËÁ°ÊýÉôʬ°ìÃפ¹¤ë¥­¡¼¤òÊÖ¤·¤Þ¤¹¡£

=item B<N¥Ä¥ê¡¼>

B ¥Ä¥ê¡¼¤Ç¥­¡¼¤òÀ°¿ôÃͤȤ·¤Æ°·¤¤¤¿¤¤¾ì¹ç¤¬¤¢¤ê¤Þ¤¹¡£¤Ä¤Þ¤ê¡¢¡Ö10¡×¤¬  
¡Ö2¡×¤è¤ê¸å¤Ë¤Ê¤ë¤è¤¦¤Ë¤·¤¿¤¤¡ÊB ¥Ä¥ê¡¼¤Ç¤Ïʸ»úÎó¤È¤·¤Æ°·¤¦¤Î¤ÇµÕ¤Ë¤Ê 
¤ë¡Ë¡£¤½¤¦¤¤¤¦¾ì¹ç¤Ë¤Ï N ¥Ä¥ê¡¼¤ò»È¤¨¤Ð¡¢¥­¡¼¤Ï long À°¿ôÃͤȤ·¤Æ°·¤ï 
¤ì¤Þ¤¹¡£¤½¤ÎÅÀ¤ò½ü¤±¤Ð B ¥Ä¥ê¡¼¤ÈƱ¤¸¤Ç¤¹¡£

  $root->{ntree} = new Pogo::Ntree;

=item B<¥ª¥Ö¥¸¥§¥¯¥È>

SCALAR/ARRAY/HASH »²¾È¤À¤±¤ò»È¤Ã¤Æ¤¤¤ë Perl ¥ª¥Ö¥¸¥§¥¯¥È¤Ç¤¢¤ì¤Ð¡¢Pogo
¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤Ç¤­¤Þ¤¹¡£

  sub Foo::new { bless {name => $_[1]}, $_[0]; }
  sub Foo::name { $_[0]->{name}; }
  $root->{obj} = new Foo "bar";
  $obj = $root->{obj};            # $obj ¤Ï Foo ¥ª¥Ö¥¸¥§¥¯¥È
  $name = $obj->name;             # $name ¤Ï "bar"

¤â¤·¡¢¥ª¥Ö¥¸¥§¥¯¥È¤Ç»È¤¦¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î¥µ¥¤¥º¤ò»ØÄꤷ¤¿¤«¤Ã¤¿¤ê¡¢
H ¥Ä¥ê¡¼¤ä B ¥Ä¥ê¡¼¤ò»È¤¤¤¿¤¤¤È¤¤¤¦¾ì¹ç¤Ï¡¢Pogo::Hash::new_tie¡¢Pogo::
Htree::new_tie¡¢Pogo::Btree::new_tie ¤Î¥á¥½¥Ã¥É¤ò»È¤Ã¤Æ¤¯¤À¤µ¤¤¡£

  sub Bar::new {
      my($class, $name) = @_;
      my $self = new_tie Pogo::Htree 10000;
      $self->{name} = $name;
      bless $self, $class;
  }

Pogo::*::new_tie ¤ò»È¤Ã¤¿¥¯¥é¥¹¤Ï Pogo ¥Ç¡¼¥¿¥Ù¡¼¥¹ÍѤˤʤ뤳¤È¤ËÃí°Õ 
¤·¤Æ¤¯¤À¤µ¤¤¡£

=item B<¥È¥é¥ó¥¶¥¯¥·¥ç¥ó>

Pogo ¤Ë¤Ï¥È¥é¥ó¥¶¥¯¥·¥ç¥óµ¡¹½¤¬¤¢¤ê¤Þ¤¹¡£¤â¤·¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¤Ä¤¤¤Æ¤Î°ì 
Ï¢¤ÎÁàºî¤ò¡ÖÉÔ²Äʬ¡×¤È¤·¤¿¤¤¾ì¹ç¡¢¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤ò»È¤¤¤Þ¤¹¡£¡ÖÉÔ²Ä  
ʬ¡×¤È¤Ï¡¢°ìÏ¢¤ÎÁàºî¤¬¤¹¤Ù¤ÆÀ®¸ù΢¤Ë¼Â¹Ô¤µ¤ì¤ë¤«¡¢¤¢¤ë¤¤¤Ï²¿¤â¹Ô¤ï¤ì¤Ê
¤¤¤«¡¢¤Î¤É¤Á¤é¤«¤Ç¤¢¤ë¤³¤È¤ò°ÕÌ£¤·¤Þ¤¹¡£¤Þ¤¿¡¢Â¾¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥¯¥é¥¤¥¢
¥ó¥È¤¬¡¢¤½¤Î°ìÏ¢¤ÎÁàºî¤Ë³ä¤ê¹þ¤ó¤ÇÍè¤Ê¤¤¤³¤È¤â°ÕÌ£¤·¤Æ¤¤¤Þ¤¹¡£

¥Ç¡¼¥¿¥Ù¡¼¥¹Á´ÂΤˤĤ¤¤Æ¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤òÁàºî¤¹¤ë¤Ë¤Ï¡¢Pogo::      
begin_transaction¡¢Pogo::abort_transaction¡¢Pogo::end_transaction ¤Î¥á
¥½¥Ã¥É¤ò»È¤¤¤Þ¤¹¡£

  $root->{key} = 1;
  
  $pogo->begin_transaction;
  $root->{key} = 2;
  $pogo->abort_transaction;    # Ãæ»ß: ¾å¤ÎÂåÆþ¤Ï¥­¥ã¥ó¥»¥ë¤µ¤ì¤ë
  $value = $root->{key};       # $value ¤Ï 1 ¤Î¤Þ¤Þ
  
  $pogo->begin_transaction;
  $root->{key} = 3;
  $pogo->end_transaction;      # ½ªÎ»: ¾å¤ÎÂåÆþ¤ÏÍ­¸ú
  $value = $root->{key};       # $value ¤Ï 3

¤³¤ì¤é¤Î¥á¥½¥Ã¥É¤Ï¡¢¥¯¥é¥¹¥á¥½¥Ã¥É¤È¤·¤Æ¤Ç¤Ï¤Ê¤¯¡¢¥ª¥Ö¥¸¥§¥¯¥È¥á¥½¥Ã¥É
¤È¤·¤Æ¸Æ¤Ð¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£

¤³¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Ï¥Ç¡¼¥¿¥Ù¡¼¥¹Á´ÂΤò¥í¥Ã¥¯¤¹¤ë¤Î¤Ç¡¢Ä¹»þ´Ö¤Î¥È¥é¥ó
¥¶¥¯¥·¥ç¥ó¤ÏʹԽèÍý¤Î¸úΨ¤òÄã²¼¤µ¤»¤Þ¤¹¡£

¥Ç¡¼¥¿Ëè¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤¬É¬Íפʾì¹ç¤Ï¡¢Pogo::atomic_call ¥á¥½¥Ã¥É¤ò
»È¤¤¤Þ¤¹¡£

  $root->{key} = \@array;
  Pogo::atomic_call(\&sortarray, $root->{key});
  sub sortarray { my $aref = shift; @$aref = sort @$aref; }

sortarray ¤¬¸Æ¤Ð¤ì¤Æ¤¤¤ë´Ö¡¢$root->{key}¤Ï¥í¥Ã¥¯¤µ¤ì¤Þ¤¹¡£½¾¤Ã¤Æ¾¤Î¥Ç
¡¼¥¿¥Ù¡¼¥¹¥¯¥é¥¤¥¢¥ó¥È¤¬¥½¡¼¥È¤ò¼ÙË⤹¤ë¤³¤È¤¬¤¢¤ê¤Þ¤»¤ó¤·¡¢¥½¡¼¥È¤¬Ãæ
ÅÓȾü¤Ë½ª¤ï¤ë¤È¤¤¤¦¤³¤È¤â¤¢¤ê¤Þ¤»¤ó¡£

¥Ç¡¼¥¿Ëè¤Î¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤Ë¤Ï¡¢¥æ¡¼¥¶¡¼¤Ë¤è¤ëÃæ»ß¤Îµ¡Ç½¤Ï¤¢¤ê¤Þ¤»¤ó¡£

=item B<¼õưŪưºî>

¥Ç¡¼¥¿¥Ù¡¼¥¹Ãæ¤Î¥Ç¡¼¥¿¤ò´Æ»ë¤·¡¢Â¾¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤Ã¤Æ¤½
¤Î¥Ç¡¼¥¿¤¬Êѹ¹¤µ¤ì¤¿¤é²¿¤«¤Î½èÍý¤ò¤¹¤ë¡¢¤È¤¤¤¦¥¹¥¯¥ê¥×¥È¤¬É¬Íפʾì¹ç¤Ï¡¢
Pogo::wait_modification ´Ø¿ô¤ò»È¤¤¤Þ¤¹¡£

  $result = Pogo::wait_modification($root->{key}, 5);

¤³¤Îʸ¤¬¼Â¹Ô¤µ¤ì¤ë¤È¡¢$root->{key}¤¬Â¾¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤Ã
¤ÆÊѹ¹¤µ¤ì¤ë¤«¡¢5É÷ФĤޤǡ¢¼Â¹Ô¤Ï»ß¤Þ¤ê¤Þ¤¹¡£$result ¤Ï¡¢¥Ç¡¼¥¿¤¬ÊÑ 
¹¹¤µ¤ì¤¿¾ì¹ç¤Ï1¡¢»þ´ÖÀÚ¤ì¤Î¾ì¹ç¤Ï0¤Ë¤Ê¤ê¤Þ¤¹¡£

»þ´ÖÀÚ¤ì¤Þ¤Ç¤ÎÉÿô¤ò¾Êά¤¹¤ë¤È¡¢±Ê±ó¤ËÂÔ¤Á³¤±¤Þ¤¹¡£

=back

=head2 ¥Ç¡¼¥¿¥Ù¡¼¥¹¥Ö¥é¥¦¥¶

Pogo ¤Ë¤Ï Pogo ¥Ç¡¼¥¿¥Ù¡¼¥¹¤ÎÆâÍƤòÇÁ¤¯¥¹¥¯¥ê¥×¥È browse ¤¬ÉÕ°¤·¤Æ¤¤ 
¤Þ¤¹¡£test.cfg ¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤òÇÁ¤¯¤Ë¤Ï¡¢¼¡¤Î¤è¤¦¤Ë¼Â¹Ô¤·¤Þ¤¹¡£

  browse test

¤¹¤ë¤È¡¢browse¤Ï¼¡¤Î¤è¤¦¤Ëɽ¼¨¤·¤Æ¡¢¥³¥Þ¥ó¥ÉÆþÎϤòÂÔ¤Á¤Þ¤¹¡£

  test.cfg opened
  root=(HASH(Btree)(10000))>

¡Öls¡×¤ÈÆþÎϤ¹¤ë¤È¥ë¡¼¥È B ¥Ä¥ê¡¼¥Ï¥Ã¥·¥å¤ÎÆâÍƤ¬Î㤨¤Ð¼¡¤Î¤è¤¦¤Ë¸«¤é 
¤ì¤Þ¤¹¡£Â¾¤Î¥Ç¡¼¥¿¤Ø¤Î»²¾È¤Ë¤Ä¤¤¤Æ¤Ï¥¯¥é¥¹Ì¾¡¢¥Ç¡¼¥¿¼ïÊÌ¡¢¥ª¥Ö¥¸¥§¥¯¥È
ID ¤¬É½¼¨¤µ¤ì¤Þ¤¹¡£

  {aobj} = Aclass(HASH(Hash)(1012d))
  {index} = (HASH(Btree)(10282))
  {list} = (ARRAY(10036))
  {name} = "test"

¤³¤³¤Ç¡Öcd index¡×¤ÈÆþÎϤ¹¤ë¤È¡¢¸½ºß°ÌÃÖ¤¬ $root->{index}¤Ë¤Ê¤ê¡¢¥×¥í 
¥ó¥×¥È¤Ï¼¡¤Î¤è¤¦¤ËÊѤï¤ê¤Þ¤¹¡£

  root{index}=(HASH(Btree))>

¡Öcd¡×¤ÈÆþÎϤ¹¤ë¤È¥ë¡¼¥È¤ËÌá¤ê¤Þ¤¹¡£¡Öcd ..¡×¤ÈÆþÎϤ¹¤ë¤È¿Æ¤ËÌá¤ê¤Þ¤¹¡£
¡Öexit¡×¤Ç½ªÎ»¤Ç¤¹¡£

=head2 ¥á¥½¥Ã¥É

¡Ö¥¯¥é¥¹¥á¥½¥Ã¥É¡×¤Èµ­¤µ¤ì¤¿¤â¤Î°Ê³°¤Ï¡¢¥ª¥Ö¥¸¥§¥¯¥È¥á¥½¥Ã¥É¤Ç¤¹¡£[]µ­
¹æ¤Ï¾Êά²Äǽ¤Ê°ú¿ô¤ò°ÕÌ£¤·¤Þ¤¹¡£

=over 4

=item $pogo = Pogo->new [config_filename]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£Pogo ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤Ã¤ÆÊÖ¤·¤Þ¤¹¡£config_filename ¤¬ 
»ØÄꤵ¤ì¤Æ¤¤¤ë¤È¡¢¤½¤ÎÀßÄê¥Õ¥¡¥¤¥ë¤Ë½¾¤Ã¤ÆÆ°ºî¤·¤Æ¤¤¤ë GOODS ¥µ¡¼¥Ð¡¼ 
¤ËÀܳ¤·¤Þ¤¹¡£Âбþ¤¹¤ë GOODS ¥µ¡¼¥Ð¡¼¤ÏÆ°ºîÃæ¤Ç¤Ê¤±¤ì¤Ð¤Ê¤ê¤Þ¤»¤ó¡£

=item $pogo->open config_filename

¤â¤· Pogo ¥ª¥Ö¥¸¥§¥¯¥È¤¬¤Þ¤À GOODS ¥µ¡¼¥Ð¡¼¤ËÀܳ¤·¤Æ¤¤¤Ê¤±¤ì¤Ð¡¢¤³¤Î 
¥á¥½¥Ã¥É¤ÇÀܳ¤·¤Þ¤¹¡£

=item $pogo->close

GOODS ¥µ¡¼¥Ð¡¼¤È¤ÎÀܳ¤òÀÚ¤ê¤Þ¤¹¡£Ä̾ï¤Ï¤³¤Î¥á¥½¥Ã¥É¤ò»È¤¦É¬ÍפϤ¢¤ê¤Þ¤»¤ó¡£
Pogo ¥ª¥Ö¥¸¥§¥¯¥È¤¬ÇË´þ¤µ¤ì¤ë¤È¤­¤Ë¼«Æ°Åª¤Ë¼Â¹Ô¤µ¤ì¤Þ¤¹¡£

=item $pogo->opened

Pogo ¥ª¥Ö¥¸¥§¥¯¥È¤¬ GOODS ¥µ¡¼¥Ð¡¼¤ËÀܳ¤·¤Æ¤¤¤ì¤Ð 1¡¢Àܳ¤·¤Æ¤¤¤Ê¤±¤ì
¤Ð 0 ¤òÊÖ¤·¤Þ¤¹¡£

=item $pogo->root

¥ë¡¼¥ÈB¥Ä¥ê¡¼¤ËÂбþ¤·¤¿Pogo::Btree¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤Ã¤ÆÊÖ¤·¤Þ¤¹¡£

=item $pogo->root_tie

¥ë¡¼¥È B ¥Ä¥ê¡¼¤ËÂбþ¤·¤¿ Pogo::Btree ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ê¡¢¤½¤ì¤Ë tie  
¤µ¤ì¤¿¥Ï¥Ã¥·¥å¤Ø¤Î»²¾È¤òÊÖ¤·¤Þ¤¹¡£

=item $pogo->begin_transaction

¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤ò³«»Ï¤·¤Þ¤¹¡£

=item $pogo->abort_transaction

¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤òÃæ»ß¤·¤Þ¤¹¡£

=item $pogo->end_transaction

¥È¥é¥ó¥¶¥¯¥·¥ç¥ó¤ò½ªÎ»¤·¤Þ¤¹¡£

=item $obj = Pogo::Scalar->new [pogoobj]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£Pogo::Scalar ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤Ã¤ÆÊÖ¤·¤Þ¤¹¡£Pogo ¥ª¥Ö¥¸
¥§¥¯¥È pogoobj ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¡£

=item $scalarref = Pogo::Scalar->new_tie [pogovar ,class]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£Pogo::Scalar ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ê¡¢¥¹¥«¥é¤ò¤½¤ì¤Ë tie ¤·¡¢
¤½¤Î¥¹¥«¥é¤Î»²¾È¤òÊÖ¤·¤Þ¤¹¡£Pogo ¤ÎÊÑ¿ô pogovar ¤¬»ØÄꤵ¤ì¡¢¤½¤ì¤¬¤¹¤Ç
¤Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢Æ±¤¸¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ
¤ì¤Þ¤¹¡£¥¯¥é¥¹Ì¾ class ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î 
¥¯¥é¥¹Ì¾¤Ç bless ¤µ¤ì¤Þ¤¹¡£

=item $obj = Pogo::Array->new [size ,pogoobj]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£size ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Î Pogo::Array ¥ª¥Ö¥¸¥§¥¯¥È¤òºî
¤Ã¤ÆÊÖ¤·¤Þ¤¹¡£size ¤¬¾Êά¤µ¤ì¤ë¤È¡¢1¤Ë¤Ê¤ê¤Þ¤¹¡£Pogo ¥ª¥Ö¥¸¥§¥¯¥È     
pogoobj ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¡£

=item $arrayref = Pogo::Array->new_tie [size ,pogovar ,class]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£size ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Î Pogo::Array ¥ª¥Ö¥¸¥§¥¯¥È¤òºî
¤ê¡¢ÇÛÎó¤ò¤½¤ì¤Ë tie ¤·¡¢¤½¤ÎÇÛÎó¤Î»²¾È¤òÊÖ¤·¤Þ¤¹¡£ size ¤¬¾Êά¤µ¤ì¤ë 
¤È¡¢1¤Ë¤Ê¤ê¤Þ¤¹¡£Pogo ¤ÎÊÑ¿ô pogovar ¤¬»ØÄꤵ¤ì¡¢¤½¤ì¤¬¤¹¤Ç¤Ë¥Ç¡¼¥¿¥Ù 
¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢Æ±¤¸¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Þ¤¹¡£¥¯
¥é¥¹Ì¾ class ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥¯¥é¥¹Ì¾ 
¤Ç bless ¤µ¤ì¤Þ¤¹¡£

=item $obj = Pogo::Hash->new [size ,pogoobj]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£size ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Î¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î Pogo::  
Hash ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤Ã¤ÆÊÖ¤·¤Þ¤¹¡£size ¤¬¾Êά¤µ¤ì¤ë¤È¡¢256 ¤Ë¤Ê¤ê¤Þ¤¹¡£
Pogo ¥ª¥Ö¥¸¥§¥¯¥È pogoobj ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤µ¤ì
¤Þ¤¹¡£

=item $hashref = Pogo::Hash->new_tie [size ,pogovar ,class]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£size ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Î¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î Pogo::  
Hash ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ê¡¢¥Ï¥Ã¥·¥å¤ò¤½¤ì¤Ë tie ¤·¡¢¤½¤Î¥Ï¥Ã¥·¥å¤Î»²¾È¤ò
ÊÖ¤·¤Þ¤¹¡£size ¤¬¾Êά¤µ¤ì¤ë¤È¡¢256 ¤Ë¤Ê¤ê¤Þ¤¹¡£Pogo ¤ÎÊÑ¿ô pogovar ¤¬ 
»ØÄꤵ¤ì¡¢¤½¤ì¤¬¤¹¤Ç¤Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢Æ±¤¸¥Ç¡¼
¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Þ¤¹¡£¥¯¥é¥¹Ì¾ class ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥¯¥é 
¥¹Ì¾¤Ç bless ¤µ¤ì¤Þ¤¹¡£

=item $obj = Pogo::Htree->new [size ,pogoobj]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£size ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Î¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î Pogo::  
Htree ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤Ã¤ÆÊÖ¤·¤Þ¤¹¡£size ¤¬¾Êά¤µ¤ì¤ë¤È¡¢ 65536 ¤Ë¤Ê¤ê
¤Þ¤¹¡£Pogo ¥ª¥Ö¥¸¥§¥¯¥È pogoobj ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³Ê
Ǽ¤µ¤ì¤Þ¤¹¡£

=item $hashref = Pogo::Htree->new_tie [size ,pogovar ,class]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£size ¤Ç»ØÄꤵ¤ì¤¿¥µ¥¤¥º¤Î¥Ï¥Ã¥·¥å¥¨¥ó¥È¥êɽ¤Î Pogo::  
Htree ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ê¡¢¥Ï¥Ã¥·¥å¤ò¤½¤ì¤Ë tie ¤·¡¢¤½¤Î¥Ï¥Ã¥·¥å¤Î»²¾È 
¤òÊÖ¤·¤Þ¤¹¡£size ¤¬¾Êά¤µ¤ì¤ë¤È¡¢ 65536 ¤Ë¤Ê¤ê¤Þ¤¹¡£Pogo ¤ÎÊÑ¿ô       
pogovar ¤¬»ØÄꤵ¤ì¡¢¤½¤ì¤¬¤¹¤Ç¤Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢
Ʊ¤¸¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Þ¤¹¡£¥¯¥é¥¹Ì¾ class ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢ 
¤½¤Î¥¯¥é¥¹Ì¾¤Ç bless ¤µ¤ì¤Þ¤¹¡£

=item $obj = Pogo::Btree->new [pogoobj]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£Pogo::Btree ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤Ã¤ÆÊÖ¤·¤Þ¤¹¡£Pogo ¥ª¥Ö¥¸ 
¥§¥¯¥È pogoobj ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¡£

=item $hashref = Pogo::Btree->new_tie [pogovar ,class]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£Pogo::Btree ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ê¡¢¥Ï¥Ã¥·¥å¤ò¤½¤ì¤Ë tie  
¤·¡¢¤½¤Î¥Ï¥Ã¥·¥å¤Î»²¾È¤òÊÖ¤·¤Þ¤¹¡£Pogo ¤ÎÊÑ¿ô pogovar ¤¬»ØÄꤵ¤ì¡¢¤½¤ì
¤¬¤¹¤Ç¤Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢Æ±¤¸¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿
¥Ã¥Á¤µ¤ì¤Þ¤¹¡£¥¯¥é¥¹Ì¾ class ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥¯¥é¥¹Ì¾¤Ç bless ¤µ
¤ì¤Þ¤¹¡£

=item $obj = Pogo::Ntree->new [pogoobj]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£Pogo::Ntree ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤Ã¤ÆÊÖ¤·¤Þ¤¹¡£Pogo ¥ª¥Ö¥¸ 
¥§¥¯¥È pogoobj ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¡£

=item $hashref = Pogo::Ntree->new_tie [pogovar ,class]

¥¯¥é¥¹¥á¥½¥Ã¥É¡£Pogo::Ntree ¥ª¥Ö¥¸¥§¥¯¥È¤òºî¤ê¡¢¥Ï¥Ã¥·¥å¤ò¤½¤ì¤Ë tie  
¤·¡¢¤½¤Î¥Ï¥Ã¥·¥å¤Î»²¾È¤òÊÖ¤·¤Þ¤¹¡£Pogo ¤ÎÊÑ¿ô pogovar ¤¬»ØÄꤵ¤ì¡¢¤½¤ì
¤¬¤¹¤Ç¤Ë¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿¥Ã¥Á¤µ¤ì¤Æ¤¤¤ë¾ì¹ç¤Ï¡¢Æ±¤¸¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë¥¢¥¿
¥Ã¥Á¤µ¤ì¤Þ¤¹¡£¥¯¥é¥¹Ì¾ class ¤ò»ØÄꤷ¤¿¾ì¹ç¤Ï¡¢¤½¤Î¥¯¥é¥¹Ì¾¤Ç bless ¤µ
¤ì¤Þ¤¹¡£

¥Î¡¼¥È¡§¤³¤ì¤é¤Î Pogo::*::new ¤ä Pogo::*::new_tie ¥á¥½¥Ã¥É¤Çºî¤é¤ì¤¿¥ª
¥Ö¥¸¥§¥¯¥È¤Ï¡¢¥á¥â¥ê¾å¤Ë¤¢¤ê¡¢¤Þ¤À±Ê³Ū¤Ç¤Ï¤¢¤ê¤Þ¤»¤ó¡£´û¸¤Î±Ê³¥Ç¡¼
¥¿¤Ë»²¾È¤µ¤ì¤¿»þ¤Ë»Ï¤á¤Æ¡¢±Ê³¥Ç¡¼¥¿¤Ë¤Ê¤ê¤Þ¤¹¡£¤Þ¤¿¡¢°ú¿ô¤Ë Pogo ¥ª¥Ö
¥¸¥§¥¯¥È¤ò»ØÄꤹ¤ë¤È¡¢¤½¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¤Ë³ÊǼ¤µ¤ì¤Þ¤¹¤¬¡¢¤ä¤Ï¤ê´û¸¤Î±Ê
³¥Ç¡¼¥¿¤Ë»²¾È¤µ¤ì¤Æ»Ï¤á¤Æ¿¿¤Ë±Ê³¥Ç¡¼¥¿¤Ë¤Ê¤ê¤Þ¤¹¡£

=back

=head2 ¥æ¡¼¥Æ¥£¥ê¥Æ¥£¡¼´Ø¿ô

=over 4

=item Pogo::type_of

»ØÄꤵ¤ì¤¿Pogo¥Ç¡¼¥¿¤Î»²¾È¥¿¥¤¥×¡¢¥¯¥é¥¹Ì¾¡¢tie¥¯¥é¥¹Ì¾¤òÊÖ¤·¤Þ¤¹¡£

  ($reftype, $class, $tiedclass) = Pogo::type_of($root->{key});

Î㤨¤Ð¼¡¤Î¤è¤¦¤ÊÃͤ¬ÆÀ¤é¤ì¤Þ¤¹¡£

  () : »²¾È¤Ç¤Ê¤¤
  ('ARRAY', '', 'Pogo::Array') : ÇÛÎó
  ('HASH', '', 'Pogo::Btree') : B¥Ä¥ê¡¼¥Ï¥Ã¥·¥å
  ('HASH', 'Aclass', 'Pogo::Hash') : Aclass¥ª¥Ö¥¸¥§¥¯¥È

=item Pogo::tied_object

»ØÄꤵ¤ì¤¿Pogo¥Ç¡¼¥¿¤Î»²¾ÈÀ褬tie¤µ¤ì¤¿Pogo::*¥ª¥Ö¥¸¥§¥¯¥È¤òÊÖ¤·¤Þ¤¹¡£

=item Pogo::equal

Æó¤Ä¤Î Pogo ¥Ç¡¼¥¿¤ò°ú¿ô¤Ë¤È¤Ã¤Æ¡¢¤½¤ì¤¬Æ±¤¸¥Ç¡¼¥¿¥Ù¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥È¤ò
»Ø¤¹¤Ê¤é1¡¢°ã¤¦¤Ê¤é0¤òÊÖ¤·¤Þ¤¹¡£

=item Pogo::object_id

»ØÄꤵ¤ì¤¿Pogo¥Ç¡¼¥¿¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥ª¥Ö¥¸¥§¥¯¥ÈID¤òÊÖ¤·¤Þ¤¹¡£

=item Pogo::atomic_call

»ØÄꤵ¤ì¤¿´Ø¿ô¤ò¡ÖÉÔ²Äʬ¡×¤Ë¼Â¹Ô¤·¡¢¤½¤Î·ë²Ì¤òÊÖ¤·¤Þ¤¹¡£

  $result = Pogo::atomic_call(\&func, $data, @args);

\&func ¤Ï¥µ¥Ö¥ë¡¼¥Á¥ó»²¾È¡¢$data ¤Ï Pogo ¥Ç¡¼¥¿¤Ç¤¹¡£$data ¤Ï¼Â¹ÔÃæ¥í 
¥Ã¥¯¤µ¤ì¤Þ¤¹¡£¥í¥Ã¥¯¤¬¤ª¤³¤Ê¤ï¤ì¤ëÅÀ¤ò½ü¤±¤Ð¡¢¼¡¤ÈƱ¤¸¤Ç¤¹¡£

  $result = func($data, @args);

func¤Ï¥¹¥«¥é¥³¥ó¥Æ¥­¥¹¥È¤Ç¸Æ¤Ð¤ì¡¢ÊÖ¤êÃͤÏÀ°¿ô¤ËÊÑ´¹¤µ¤ì¤Þ¤¹¡£

=item Pogo::wait_modification

»ØÄꤵ¤ì¤¿¥Ç¡¼¥¿¤¬Â¾¤Î¥Ç¡¼¥¿¥Ù¡¼¥¹¥¯¥é¥¤¥¢¥ó¥È¤Ë¤è¤Ã¤ÆÊѹ¹¤µ¤ì¤ë¤«¡¢¤¢
¤ë¤¤¤Ï»ØÄꤵ¤ì¤¿Éÿô·Ð¤Ä¤Þ¤ÇÂÔ¤Á¤Þ¤¹¡£¥Ç¡¼¥¿¤¬Êѹ¹¤µ¤ì¤¿¾ì¹ç¤Ï1¡¢»þ´Ö 
ÀÚ¤ì¤Î¾ì¹ç¤Ï0¤òÊÖ¤·¤Þ¤¹¡£

  $result = Pogo::wait_modification($data, $sec);

»þ´ÖÀÚ¤ì¤Þ¤Ç¤ÎÉÿô¤¬¾Êά¤µ¤ì¤ë¤È¡¢±Ê±ó¤ËÂÔ¤Á¤Þ¤¹¡£

=item Pogo::get_root_tie

°ú¿ô¤Ë»ØÄꤵ¤ì¤¿ Pogo ¥Ç¡¼¥¿¤«¤é¡¢¥Ç¡¼¥¿¥Ù¡¼¥¹¤Î¥ë¡¼¥È B ¥Ä¥ê¡¼¤ËÂбþ 
¤·¤¿ Pogo::Btree ¥ª¥Ö¥¸¥§¥¯¥È¤òÆÀ¤Æ¡¢¤½¤ì¤Ë tie ¤µ¤ì¤¿¥Ï¥Ã¥·¥å¤Ø¤Î»²¾È
¤òÊÖ¤·¤Þ¤¹¡£ 

  $root = Pogo::get_root_tie($pogovar);

=back

=head2 Äã¥ì¥Ù¥ë¥á¥½¥Ã¥É

°Ê²¼¤Î¥á¥½¥Ã¥É¤Ïtie¥¤¥ó¥¿¡¼¥Õ¥§¡¼¥¹ÆâÉô¤Ç»È¤ï¤ì¤Æ¤¤¤ë¤â¤Î¤Ç¤¹¡£

=over 4

=item Pogo::Var

Pogo::Var ¤Ï¡¢°Ê²¼¤Î Pogo::*¥¯¥é¥¹·²¤¹¤Ù¤Æ¤ÎÃê¾Ý´ðËÜ¥¯¥é¥¹¤Ç¤¹¡£Pogo::
Var ¥ª¥Ö¥¸¥§¥¯¥È¤Ï»È¤¨¤Þ¤»¤ó¡£

  Pogo::Var::get_class
  Pogo::Var::set_class
  Pogo::Var::begin_transaction
  Pogo::Var::abort_transaction
  Pogo::Var::end_transaction
  Pogo::Var::root
  Pogo::Var::root_tie
  Pogo::Var::call
  Pogo::Var::equal
  Pogo::Var::wait_modification
  Pogo::Var::object_id

=item Pogo::Scalar

  Pogo::Scalar::get
  Pogo::Scalar::set

=item Pogo::Array

  Pogo::Array::get
  Pogo::Array::set
  Pogo::Array::get_size
  Pogo::Array::set_size
  Pogo::Array::clear
  Pogo::Array::push
  Pogo::Array::pop
  Pogo::Array::insert
  Pogo::Array::remove

=item Pogo::Hash

  Pogo::Hash::get
  Pogo::Hash::set
  Pogo::Hash::exists
  Pogo::Hash::remove
  Pogo::Hash::clear
  Pogo::Hash::first_key
  Pogo::Hash::next_key

=item Pogo::Htree

  Pogo::Htree::get
  Pogo::Htree::set
  Pogo::Htree::exists
  Pogo::Htree::remove
  Pogo::Htree::clear
  Pogo::Htree::first_key
  Pogo::Htree::next_key

=item Pogo::Btree, Pogo::Ntree

°Ê²¼¤Î¥á¥½¥Ã¥É¤ÏPogo::Ntree¤Ç¤âƱ¤¸

  Pogo::Btree::get
  Pogo::Btree::set
  Pogo::Btree::exists
  Pogo::Btree::remove
  Pogo::Btree::clear
  Pogo::Btree::first_key
  Pogo::Btree::last_key
  Pogo::Btree::next_key
  Pogo::Btree::prev_key
  Pogo::Btree::find_key

=back

=head2 Äã¥ì¥Ù¥ë¥¯¥é¥¹¤ÎÇÉÀ¸¤È¥á¥½¥Ã¥É¤Î¥Õ¥Ã¥¯

Äã¥ì¥Ù¥ë¥¯¥é¥¹¤«¤é¤ÎÇÉÀ¸¥¯¥é¥¹¤òºî¤Ã¤Æ¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤¹¤ë¤³¤È¤¬¤Ç¤­¤Þ¤¹¡£¤Þ¤¿¡¢¥á¥½¥Ã¥É¤ò¥ª¡¼¥Ð¡¼¥é¥¤¥É¤¹¤ëÂå¤ï¤ê¤Ë¡¢¥á¥½¥Ã¥É¤ò¥Õ¥Ã¥¯¤¹¤ë»ÅÁȤߤâÍÑ°Õ¤µ¤ì¤Æ¤¤¤Þ¤¹¡£

Î㤨¤ÐPogo::Array::set¥á¥½¥Ã¥É¤ò¥Õ¥Ã¥¯¤·¤¿¤¤¾ì¹ç¤Ï¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£

  # MyArray.pm
  package MyArray;
  @ISA = qw(Pogo::Array);
  %HOOK = (set => \&set_hook);  # set() ¥á¥½¥Ã¥É¤ò set_hook() ¤Ç¥Õ¥Ã¥¯
  sub set_hook {
    my($self, $idx, $value) = @_;
    do_something($self, $idx, $value);
    1;     # µ¶¤òÊÖ¤¹¤È¸µ¤Î¥á¥½¥Ã¥É¤Ï¸Æ¤Ð¤ì¤Ê¤¤
  }
  ...
  1;

¤½¤·¤Æ¼¡¤Î¤è¤¦¤Ë¤·¤Þ¤¹¡£

  use MyArray;
  $obj = new MyArray;
  $obj->set(0, "value"); # set_hook($obj, 0, "value") ¤È Pogo::Array::set($obj, 0, "value") ¤¬¸Æ¤Ð¤ì¤ë


=head1 AUTHOR

ÃæÅç Ì÷ <nakajima@netstock.co.jp>

=head1 SEE ALSO

GOODS¤Îreadme.htm