Beefy Boxes and Bandwidth Generously Provided by pair Networks
No such thing as a small change
 
PerlMonks  

Re: Re: Problem with Tie::RegexpHash

by sch (Pilgrim)
on Oct 10, 2002 at 17:20 UTC ( [id://204239]=note: print w/replies, xml ) Need Help??


in reply to Re: Problem with Tie::RegexpHash
in thread Problem with Tie::RegexpHash

Yup, thought of that :) - but then when I have problems later on (as I always do), the first things the monks would say is use -w (well, after use strict).

Looking at the documentation for the module, it says of the add method:

$obj->add( $key, $value );
Adds a new key/value pair to the hash. $key can be a Regexp or a string (which is compiled into a Regexp).
If $key is already defined, the value will be changed. If $key matches an existing key (but is not the same), a warning will be shown if warnings are enabled.

and I suspect that the final paragraph is coming into play, but I can't see why.

Replies are listed 'Best First'.
Re: Re: Re: Problem with Tie::RegexpHash
by Mr. Muskrat (Canon) on Oct 10, 2002 at 17:32 UTC
    After having read the docs for Tie::RegexpHash, I still haven't found a solution. I'd say that your best bet would be to contact the author.

      Yup, having to do that - was trying to get something working quickly and hoped someone else had come across a solution

      What I'm trying to do is a simple parser for some commands and I was thinking of using a hash with the keys being regexp's that would match commands and the value's being references to functions - if anyone knows of another way of doing it I'm always willing to change direction mid-flow :)

        decided to add this as a seperate node

        This is the starting point I've got so far:

        #!/usr/bin/perl -w use strict; use diagnostics; my %cmds; my $rgx; my $sub; $cmds{qr/^\s*quit/} = \&quit; $cmds{qr/^\s*cmd .*/} = \&cmd; my $txt = "cmd 12 arg2"; foreach $rgx (keys(%cmds)) { if ( $txt =~ /$rgx/i ) { $sub = $cmds{$rgx}; &$sub($txt); } } exit; sub quit { print "called quit\n"; } sub cmd { my ($cmd, @argx) = split /\s+/, $_[0]; print "called ".$cmd." with ".$argx[0]." ".$argx[1]."\n"; }

        which when called as above returns:

        called cmd with 12 arg2

        and if the line:
        my $txt = "cmd 12 arg2";
        is changed to
        my $txt = "quit";
        returns:

        called quit

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://204239]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others surveying the Monastery: (4)
As of 2024-03-29 01:45 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found