perldbmfilter - Perl DBM �����c�˨�
$db = tie %hash, 'DBM', ...
$old_filter = $db->filter_store_key ( sub { ... } );
$old_filter = $db->filter_store_value( sub { ... } );
$old_filter = $db->filter_fetch_key ( sub { ... } );
$old_filter = $db->filter_fetch_value( sub { ... } );
筝�菴違�勐����ゃ�� filter_*
��<�純�������壔��Perl �����宴����肴�激�������⓾����������⓾� DBM ��≪�吾�ャ�若�˨����ゃ�障�� DB_File, GDBM_File, NDBM_File, ODBM_File, SDBM_File ��у�ñ���櫝�純�с�����
��������������勉�<�純�������壠�����������������������篏�������筝���ゃ�� DBM �����c�˨�帥� ��ゃ�潟�鴻����若��(��障����壔�≪�潟�ゃ�潟�鴻����若��)��勉�������˩戎��������障����� �����������勐�壚����勰�������壔����c�˨�帥����ゃ�潟�鴻����若�˨�������贋����с�����
荀�膣����������:
- filter_store_key
-
�����c�˨�帥�������勉�<�純�������˨�ゃ�潟�鴻����若�˨��������������DBM �����若�帥����若�鴻�˨�㏍�若�� ��吾��莨若��罸���̬儀�����������障�����
- filter_store_value
-
�����c�˨�帥�������勉�<�純�������˨�ゃ�潟�鴻����若�˨��������������DBM �����若�帥����若�鴻����ゃ�� ��吾��莨若��罸���̬儀�����������障�����
- filter_fetch_key
-
�����c�˨�帥�������勉�<�純�������˨�ゃ�潟�鴻����若�˨��������������DBM �����若�帥����若�鴻�������㏍�若�� 茯㏍�粋昭���罸���̬儀�����������障�����
- filter_fetch_value
-
�����c�˨�帥�������勉�<�純�������˨�ゃ�潟�鴻����若�˨��������������DBM �����若�帥����若�鴻�������ゃ�� 茯㏍�粋昭���罸���̬儀�����������障�����
�����������勉�<�純�������� 0 ��������� 4 ��������⓾�障�уソ�����ɾ����水����������т戎�����障�����
�����⓾�勉����c�˨�帥�<�純�������壔�������������井�≪�̥�脂�蚊�������⓾����������c�˨�帥����� ��ŝ�������� undef
���菴������障�����
�����c�˨�帥�������ゃ�������˨�� undef
���羝<����障�����
(�����c�˨��)
��������������勉����c�˨�帥�� Perl ��˨����c�☗�若�喝�冴��������������$_
��勉�㏍�若�˨�˨�潟����若�˨� �����c�˨�帥����������㏍�若����ゃ����ャ����障����� �����c�˨�帥�ŝ�潟�違�� $_
��勐��絎鴻��紊���眼�������������˨����c�☀����������障����� �����c�˨�帥�������勤�������ゃ�夌�∴����������障�����
(箴�: NULL 腟�腴壠�馹�)
�����⓾�勉�㏍�若�������⓾�勐�ゃ�������������壔����勌検��鴻��絲障����☗�����紊������� 絽吾�� 茵������������������ɱ�馹���勛┏蕁���˨�� DBM �����c�˨�帥��箴水�í�с�����
箴������違��篁ヤ����勉�������ŝ�激����ŝ�ŝ����������障����� ��泣�若�������若����� C ��≪����ŝ�宴�若�激�с�潟����掩��������綽�荀���������� DBM �����若�帥����若�鴻�� ��������障����� C ��≪����ŝ�宴�若�激�с�潟�� �����⓾�� ��㏍�若����ゃ�� NULL 腟�腴壔�������⓾�������������� 篁勐�������⓾����障����� 罧�綽泣�ŝ����� Perl ��� DBM �����若�帥����若�鴻����吾��莨若����������˨�� NULL 腟�腴壔����ŝ����勉�с�� Perl ��≪����ŝ�宴�若�激�с�潟�虁�ɱ����ʃ昆��� NULL 腟�腴壔��膊∞��������綽�荀������������障����� �����若�帥����若�鴻����吾��莨若����������˨��篁ヤ����勉�������ŝ��������������綽�荀������������障��:
$hash{"$key\0"} = "$value\0";
���罕���˨�������с�˨�������㏍�若����ゃ�勰�激����������勉�������������˨�� NULL ���荐�膊������ャ����� 綽�荀������������障�����
��<�ゃ�潟�≪����ŝ�宴�若�激�с�潟�勉�潟�若����с�� NULL 腟�腴壠�馹������∴�������⓾�� �����若�帥����若�鴻����吾��莨若����������˨�虁�ɱ�������̥��腴壔�� NULL ���菴遵�������⓾�� �����若�帥����若�鴻�����茯㏍�粋昭�����������˨�虁�ɱ�������������ゃ�����罘�罕������������ �����⓾��箴水�í�с����� ��≪����喝����壔����⓾����������������障����������������� DBM �����c�˨�帥��膂≦����˩信罩c�с����� ��馹���с�����
use strict;
use warnings;
use SDBM_File;
use Fcntl;
my %hash;
my $filename = "filt";
unlink $filename;
my $db = tie(%hash, 'SDBM_File', $filename, O_RDWR|O_CREAT, 0640)
or die "Cannot open $filename: $!\n";
# Install DBM Filters
$db->filter_fetch_key ( sub { s/\0$// } );
$db->filter_store_key ( sub { $_ .= "\0" } );
$db->filter_fetch_value(
sub { no warnings 'uninitialized'; s/\0$// } );
$db->filter_store_value( sub { $_ .= "\0" } );
$hash{"abc"} = "def";
my $a = $hash{"ABC"};
# ...
undef $db;
untie %hash;
筝�菴違�勉�潟�若����с�� SDBM_File ���篏帥�c�⓾����障�������������������� DBM ��≪�吾�ャ�若�˨�с�� ���篏������障�����
��堺�ャ����違����������������勉����c�˨�帥�勐��絎鴻�虁�ɱ訓茯㋛�������с�������鴻����с����� 筝≧�鴻�� "fetch" �����c�˨�帥�夌��腴壔�� NULL ��������ゃ�����筝≧�鴻�� "store" �����c�˨�帥� 腟�腴壔����� NULL ���菴遵�������障�����
(������筝���ゃ�勌��: ��㏍�若�� C ��� int)
������筝���ゃ�勐�������勛��羇祉�勌����с����� ��������í�˨����с�壔��Perl ��� DBM �����若�帥����若�鴻����吾��莨若����������壔����ゃ�с����� ��㏍�若����ゃ�����絖������������〠�吾��莨若�帥�障����� 緇���c�⓾��篁ヤ����勉�������˩戎������:
$hash{12345} = "something";
��㏍�� 12345 ��壔��5 �����ゃ����勖��絖���� "12345" ��������� DBM �����若�帥����若�鴻������� 篆�膊<�������障����� 絎������� DBM �����若�帥����若�鴻�� C ��� int ��������⓾�㏍�若��篆�膊<����������翫����壔�� ��吾��莨若����������� pack
���篏帥�����茯㏍�粋昭������������ unpack
���篏帥�� 綽�荀������������障�����
篁ヤ����壔����勉�������� DBM ���篏帥����障��:
use strict;
use warnings;
use DB_File;
my %hash;
my $filename = "filt";
unlink $filename;
my $db = tie %hash, 'DB_File', $filename, O_CREAT|O_RDWR, 0666,
$DB_HASH or die "Cannot open $filename: $!\n";
$db->filter_fetch_key ( sub { $_ = unpack("i", $_) } );
$db->filter_store_key ( sub { $_ = pack ("i", $_) } );
$hash{123} = "def";
# ...
undef $db;
untie %hash;
筝�菴違�勉�潟�若����с�� DB_File ���篏帥�c�⓾����障�������������������� DBM ��≪�吾�ャ�若�˨�с�� ���篏������障�����
篁������壚����ゃ�勉����c�˨�帥��������篏帥�c�⓾����障��; ��㏍�若�勐��絎鴻�����������篏������� 綽�荀������������勉�с����ゃ����c�˨�帥����ゃ�潟�鴻����若�˨�����綽�荀���壔�������障�������с��������
DB_File, GDBM_File, NDBM_File, ODBM_File, SDBM_File
Paul Marquess