camel

�ʲ��˿�ȯ����ơ�

�ѥå������γ��ؤϤɤ��ޤǿ�������뤫

�����Ĵ�٤뤿��ˡ��ʲ��Υ�����ץȤ��Ѱդ�����

#!/usr/local/bin/perl
use strict;
use warnings;
use Data::Dumper;
my $maxdepth = shift || 1024;
my $ns = 'P';
sub dummy { 1 }
print Dumper \%P::;

for my $i ( 1 .. $maxdepth ) {
    no strict 'refs';
    local *{ $ns . '::dummy' } = \&dummy;
    printf "depth=%d; P::...::dummy=%d\r", $i, &{ $ns . '::dummy' };
    $ns .= '::P';
}
print "\n";
print Dumper \%P::;
eval { 
    no strict 'refs'; 
    warn &{ 'P' . '::' . 'dummy' };
};
warn $@ if $@;
system qw/ps ux -p/, $$;

�����Ȥä�Ĵ�٤Ƥߤ�ȡ������ϡ֥��꡼�λ��ĸ¤�ɤ��ޤǤ�פ�OK�Τ褦����20000���餤�ޤǤ�äƤߤơ����ѥ��꡼��600MB��Ķ�����ΤǤ������ݤ����Ť��Ƥ���������ϻ�Ƥ��ʤ���

Perl��̾������(namespace)�ϤɤΤ褦�˼�������Ƥ��뤫

�������餬���ꡣ

���script��⤦���٤褯���Ƥߤ�ȡ��ʤ�����ۤɥ��꡼�򿩤��Τ��������Ǥ���ΤǤϤʤ�������äƤ������̾�����֤��äơ������˰��Ū�˥��֥롼�������Ͽ���Ƥ�������Ǥ��롣����ʤΤ˻��ѥ��꡼�Ϥɤ�ɤ������ƹԤ����ʤ���������

���������ܤ��Ƥ������������Τ���Dumper�ν��ϡ�������������ܤ���ȡ������ʤ롣

�롼����
VAR1 = {};
�롼�׸�
depth=1024; P::...::dummy=1
$VAR1 = {
          'P::' => *{'P::P::'},
          'dummy' => *P::dummy
        };

����϶��äݤ��ä�%P::�˲�������äƤ��롣�Ǥ�%P::�äƤʤ����?

���줬��Symbol Table Hash, ά���� stash �������ܸ��Ƥ��̤ꡢStash ��̾����������ѿ��򥭡��Ȥ��� hash �ˤʤäƤ��롣�����Ƥ������P::�Ȥ����������б������ͤ�������̾�����֤ػ��ȤȤʤäƤ��롣�̤θ������򤹤�ȡ�$P::P::P::var�˰��٤Ǥ⥢����������ȡ�%P::P::P::�Ȥ���stash�����ǤϤʤ���%P::P::��%P::�����������Τ���

% perl -MData::Dumper -e '$P::P::P::var=1; print Dumper \%P::'
$VAR1 = {
          'P::' => *{'P::P::'}
        };

�����ơ����������פʤΤ�������ü�������줿 stash �ϡ��ץ���������̤ޤDz�������ʤ���stash �Ȥ����Τϴؿ�����ޤǴޤ᤿�������Х��ѿ����֤����ʤΤ����餢���̣�����ǤϤ��롣

�����ޤ����ѥå������ѿ����ޤ᤿�������Х��ѿ�����ߤ˻Ȥ��٤��ǤϤʤ���ͳ�ʤΤǤ��롣

����̾�����֤� stash �˴ؤ��Ƥϡ��֥ҥ祦�ܡפ��ȡּ���Perl�ץ�����ߥ󥰡פ˾ܤ������������Perl�����פ������ष���ּ��ѡפˤդ��路���ܤǤ��뤬�������"Advanced Perl Programming"��Advanced�ʤȤ����˴ؤ��ƤϺ��Ǥ⤳�줬���ҤȤ��ƤϺǤ�Advanced������򰷤äƤ���Ȼפ���

Dan the Perl Monger