PDL function call failing

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Mark Ohlund

    PDL function call failing

    I'm trying to use the PDL modules to perform a Vector Space search as
    shown in: http://www.perl.com/pub/a/2003/02/19/engine.html

    I'm running FreeBSD 4.9 w/ Perl 5.6.1 and 2.4.1 of PDL.

    The source code for the search is:
    Since 1997 Perl.com has published articles about the Perl programming language, its culture and community.


    I'm calling this with the following code:

    #!/usr/bin/perl

    use Search::VectorS pace;

    my @docs = ("the cat in the hat.", "A cat is a fine pet.",
    "Dogs and cats make good pets.", "I haven't got a hat.");
    my $engine = Search::VectorS pace->new( docs => \@docs, threshold => .04);
    $engine->build_index( );

    while ( my $query = <STDIN> ) {
    my %results = $engine->search( $query );
    print join "\n>>", keys %results;
    }

    When I call the VectorSpace code, I get an error at line 180:

    Can't modify non-lvalue subroutine call in concatenation (.) or string
    at /usr/local/lib/perl5/5.6.1/Search/VectorSpace.pm line 180, near "$value;"

    Line 180 is:

    index( $vector, $offset ) .= $value;

    I *think* the problem is that rather than using the PDL index function
    which should set the value of the PDL vector object at $offset to
    $value, Perl thinks I'm trying to access the intrinsic Perl index
    function. I've tried prefacing the index call with PDL:: to no avail.

    Does anyone have insight into what I may be doing wrong? I'll admit my
    Perl is pretty rusty, but making use of this search would be a big help.
    Thanks.

    Mark.

  • Slaven Rezic

    #2
    Re: PDL function call failing

    Mark Ohlund <ohlund@woodwre cker.com> writes:
    [color=blue]
    > I'm trying to use the PDL modules to perform a Vector Space search as
    > shown in: http://www.perl.com/pub/a/2003/02/19/engine.html
    >
    > I'm running FreeBSD 4.9 w/ Perl 5.6.1 and 2.4.1 of PDL.
    >
    > The source code for the search is:
    > http://www.perl.com/2003/02/19/examples/VectorSpace.pm
    >
    > I'm calling this with the following code:
    >
    > #!/usr/bin/perl
    >
    > use Search::VectorS pace;
    >
    > my @docs = ("the cat in the hat.", "A cat is a fine pet.",
    > "Dogs and cats make good pets.", "I haven't got a hat.");
    > my $engine = Search::VectorS pace->new( docs => \@docs, threshold => .04);
    > $engine->build_index( );
    >
    > while ( my $query = <STDIN> ) {
    > my %results = $engine->search( $query );
    > print join "\n>>", keys %results;
    > }
    >
    > When I call the VectorSpace code, I get an error at line 180:
    >
    > Can't modify non-lvalue subroutine call in concatenation (.) or string
    > at /usr/local/lib/perl5/5.6.1/Search/VectorSpace.pm line 180, near
    > "$value;"
    >
    > Line 180 is:
    >
    > index( $vector, $offset ) .= $value;[/color]

    This looks like invalid perl to me.
    [color=blue]
    >
    > I *think* the problem is that rather than using the PDL index function
    > which should set the value of the PDL vector object at $offset to
    > $value, Perl thinks I'm trying to access the intrinsic Perl index
    > function. I've tried prefacing the index call with PDL:: to no avail.
    >
    > Does anyone have insight into what I may be doing wrong? I'll admit my
    > Perl is pretty rusty, but making use of this search would be a big
    > help. Thanks.
    >[/color]

    It's probably best to ask the module author about this.

    Regards,
    Slaven

    --
    Slaven Rezic - slaven@rezic.de

    tkruler - Perl/Tk program for measuring screen distances

    Comment

    Working...