Beefy Boxes and Bandwidth Generously Provided by pair Networks
Don't ask to ask, just ask
 
PerlMonks  

Re: Key-Board Interactive Perl Application

by LanX (Canon)
on Dec 12, 2012 at 11:51 UTC ( #1008491=note: print w/ replies, xml ) Need Help??


in reply to Key-Board Interactive Perl Application

Term::ReadLine is a core module which facilitates keyboard interactions a lot and is extremely rich in features.

The simplest approach to execute the input text is eval.

Depending if it's just a personal play tool or an application for other users you should consider limiting what input is executed!

E.g. Grandfather showed you an approach to limit input to methods of a special class w/o eval, which is quite safe!

Example: Just taking the synopsis-code from term-readline already does most of the trick. Additionally limiting to package 'allowed_subs" is a (weaker) protection against misuse.

use Term::ReadLine; my $term = Term::ReadLine->new('Simple Perl calc'); my $prompt = "Enter code: "; my $OUT = $term->OUT || \*STDOUT; while ( defined ($_ = $term->readline($prompt)) ) { my $res = eval("package allowed_subs; $_"); warn $@ if $@; print $OUT $res, "\n" unless $@; $term->addhistory($_) if /\S/; } package allowed_subs; sub ab { `xmessage "@_"` # Pop-Up input (linux only) }

Cheers Rolf


Comment on Re: Key-Board Interactive Perl Application
Download Code

Log In?
Username:
Password:

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

How do I use this? | Other CB clients
Other Users?
Others scrutinizing the Monastery: (10)
As of 2015-07-01 21:55 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    The top three priorities of my open tasks are (in descending order of likelihood to be worked on) ...









    Results (22 votes), past polls