in reply to Re^10: Do you really want to use an array there?
in thread Do you really want to use an array there?

Finaly the winner is the vec function,but is more expencive on space that pack w.. ..

use strict; use Benchmark qw( timethese cmpthese ); my $df=1000000;my $tf=3; our $packedW =''; our $packedVec =''; my $nr=0; foreach(0 .. $df) { $packedW .= pack 'w*', $_; $packedW .= pack 'w*', $tf; vec ($packedVec, $nr++, 32) = $_; # DOC ID...... vec ($packedVec, $nr++, 32) = $tf; # TF...... } cmpthese 10, { unpackW => q[ my $odd=0;my %pack;my $doc=0; foreach (unpack 'w*', $packedW) { if($odd%2!=0) { $pack{$doc}=$_;$odd++;next; } $doc=$_; $odd++; } ], unVec => q[ my $docID=0; my $tf=0; my $index=0; my %vec; foreach (0 .. 1000000) { $docID = vec ($packedVec, $index++, 32); $tf = vec ($packedVec, $index++, 32); $vec{$docID}=$tf; } ], }; print "$_: ", length( do{ no strict; ${$_} } ) for qw[ packedVec packedW ]; __END__ s/iter unpackW unVecNoGaP unpackW 21.7 -- -60% unVec 8.69 149% -- packedVec: 8000008 packedW: 3983492


If you have any sugestion how can distinguish eficient the two difirent numbers(docID and TF) with the pack function will be great...

Thanks for your help...