sub Compare { my($k1, $k2)=@_; $k1 cmp $k2; } ... $DB_BTREE->{'compare'} = \&Compare ; #### #!/usr/bin/perl use strict; use warnings; use DB_File; my %hash; tie %hash, 'DB_File', undef, undef, 0666, $DB_BTREE; $DB_BTREE->{'compare'} = sub { my($k1, $k2)=@_; my($v1)=split(' , ', $hash{$k1}); my($v2)=split(' , ', $hash{$k2}); $v1 <=> $v2; }; $hash{key1}='1 , First data'; $hash{key2}='2 , Second data'; $hash{key3}='3 , Third data'; print "A random record (#2): $hash{key2}\n"; #notice no sort on the next line as the records come back in order. foreach my $k ( keys %hash ) { my($n, $v)=split(' , ', $hash{$k}); print "$k: $n: $v\n"; }