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/


Reply via email to