Skip to content

Latest commit

 

History

History
363 lines (232 loc) · 8.81 KB

perldbmfilter.pod

File metadata and controls

363 lines (232 loc) · 8.81 KB

NAME

perldbmfilter - Perl DBM �����c�˨�

SYNOPSIS

$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 { ... } );

DESCRIPTION

筝�菴違�勐����ゃ�� 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 ���羝<����障�����

The Filter

(�����c�˨��)

��������������勉����c�˨�帥�� Perl ��˨����c�☗�若�喝�冴��������������$_ ��勉�㏍�若�˨�˨�潟����若�˨� �����c�˨�帥����������㏍�若����ゃ����ャ����障����� �����c�˨�帥�ŝ�潟�違�� $_ ��勐��絎鴻��紊���眼�������������˨����c�☀����������障����� �����c�˨�帥�������勤�������ゃ�夌�∴����������障�����

An Example: the NULL termination problem.

(箴�: 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 ���菴遵�������障�����

Another Example: Key is a C int.

(������筝���ゃ�勌��: ��㏍�若�� 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�˨�帥����ゃ�潟�鴻����若�˨�����綽�荀���壔�������障�������с��������

SEE ALSO

DB_File, GDBM_File, NDBM_File, ODBM_File, SDBM_File

AUTHOR

Paul Marquess