X-Git-Url: http://git.shadowcat.co.uk/gitweb/gitweb.cgi?a=blobdiff_plain;f=pod%2Fperldbmfilter.pod;h=d62e496f9f1b42fc7d81ff82fddd1b71e8d585e2;hb=85b35914c9f3fc562f8a505e6508276be17f9d70;hp=f10bdd06027bbd1f17574ffaff915ada0dd8e202;hpb=769c28980682c9f2c20f6c60950b1b28469d23fa;p=p5sagit%2Fp5-mst-13.2.git diff --git a/pod/perldbmfilter.pod b/pod/perldbmfilter.pod index f10bdd0..d62e496 100644 --- a/pod/perldbmfilter.pod +++ b/pod/perldbmfilter.pod @@ -4,13 +4,12 @@ perldbmfilter - Perl DBM Filters =head1 SYNOPSIS - my $db = tie my %hash, 'DBM', ...; + $db = tie %hash, 'DBM', ... - my $old_filter; - $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 { ... } ); + $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 { ... } ) ; =head1 DESCRIPTION @@ -86,30 +85,30 @@ the database and have them removed when you read from the database. As I'm sure you have already guessed, this is a problem that DBM Filters can fix very easily. - use strict; - use warnings; - use SDBM_File; - use Fcntl; + use strict ; + use warnings ; + use SDBM_File ; + use Fcntl ; - my %hash; - my $filename = '/tmp/filt'; - unlink $filename; + 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"; + 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_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" } ); + sub { no warnings 'uninitialized' ;s/\0$// } ) ; + $db->filter_store_value( sub { $_ .= "\0" } ) ; - $hash{abc} = 'def'; - my $a = $hash{ABC}; + $hash{"abc"} = "def" ; + my $a = $hash{"ABC"} ; # ... - undef $db; - untie %hash; + undef $db ; + untie %hash ; The code above uses SDBM_File, but it will work with any of the DBM modules. @@ -125,7 +124,7 @@ Here is another real-life example. By default, whenever Perl writes to a DBM database it always writes the key and value as strings. So when you use this: - $hash{12345} = 'something'; + $hash{12345} = "something" ; the key 12345 will get stored in the DBM database as the 5 byte string "12345". If you actually want the key to be stored in the DBM database @@ -134,23 +133,23 @@ when reading. Here is a DBM Filter that does it: - use strict; - use warnings; - use DB_File; - my %hash; - my $filename = '/tmp/filt'; - unlink $filename; + 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"; + or die "Cannot open $filename: $!\n" ; - $db->filter_fetch_key ( sub { $_ = unpack('i', $_) } ); - $db->filter_store_key ( sub { $_ = pack ('i', $_) } ); - $hash{123} = 'def'; + $db->filter_fetch_key ( sub { $_ = unpack("i", $_) } ) ; + $db->filter_store_key ( sub { $_ = pack ("i", $_) } ) ; + $hash{123} = "def" ; # ... - undef $db; - untie %hash; + undef $db ; + untie %hash ; The code above uses DB_File, but again it will work with any of the DBM modules.