On Thursday 29 November 2007 03:08, Giuseppe.G. wrote: > > Hello there,
Hello, > I'm trying to understand and modify some perl code to > create an index of word. The subroutine I have is in OO Perl, and I'm > just starting to learn normal Perl. So I'd like to transform it. Here > it is: > > sub make_word_list { > my ( $self ) = @_; > my %all_words; > foreach my $doc ( @{ $self->{docs} } ) { > my %words = $self->get_words( $doc ); > foreach my $k ( keys %words ) { > #print "Word: $k\n"; > $all_words{$k} += $words{$k}; > } > } > > #-------------?? from here > # create a lookup hash of word to position > my %lookup; > my @sorted_words = sort keys %all_words; > @[EMAIL PROTECTED] = (1..$#sorted_words ); @lookup{ } is a hash slice. Search for "Slices" in the perldata man page: perldoc perldata Also, if you have warnings enabled, you should get a warnings when that line is run. Say that @sorted_words contains four elements therefore the value of $#sorted_words will be 3 and the message "Odd number of elements in hash assignment" should be displayed. That line should be: @lookup{ @sorted_words } = 1 .. @sorted_words; Or: @lookup{ @sorted_words } = 0 .. $#sorted_words; > $self->{'word_index'} = \%lookup; > $self->{'word_list'} = [EMAIL PROTECTED]; > $self->{'word_count'} = scalar @sorted_words; > } > > and it's called by > > make_word_list(); > > Ok, the first part is clear (til when %all_words is created). > > %all_words for us is a hash like > > KEY VALUE > word frequency in documents > foo 32 > cat 12 > ... > > but what about the rest? @sorted_words contains just the sorted words > with no frequency, and then? That depends on what the rest of the program is doing. John -- use Perl; program fulfillment -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] http://learn.perl.org/