gator456 has asked for the wisdom of the Perl Monks concerning the following question:

I have a follow up to this question:
http://perlmonks.org/?node_id=689245
(Thank you very much for your response,zentara.)

Is there any suggested read I should be looking at instead of all these questions?

In the example that zentara gave me (listed at the end), you have to hit the execute button for data to go from the entry box to the UNIX program. Is it possible for the data in the entry box to be process when a < CR > is hit instead of clicking on the 'Execute' button?

#!/usr/bin/perl use warnings; use strict; use Tk; use IPC::Open3; require Tk::ROText; $|=1; my $mw = new MainWindow; my $entry=$mw->Entry(-width => 80)->pack; $mw->Button(-text => 'Execute', -command => \&send_to_shell)->pack; my $textwin =$mw->Scrolled('ROText', -width => 80, -bg =>'white', -height => 24, )->pack; $textwin->tagConfigure( 'err', -foreground => 'red' ); my $pid = open3( \*IN, \*OUT, \*ERR, '/bin/bash' ) or warn "$!\n"; $mw->fileevent( \*OUT, readable => \&read_stdout ); $mw->fileevent( \*ERR, readable => \&read_stderr ); $entry->focus; MainLoop; sub read_stdout { if( sysread( OUT, my $buffer, 1024 ) > 0 ){ $textwin->insert( 'end', $buffer ); $textwin->see('end'); } } sub read_stderr { if( sysread(ERR, my $buffer, 1024 ) > 0 ){ $textwin->insert( 'end', $buffer, 'err' ); $textwin->see('end'); } } sub send_to_shell { my $cmd= $entry->get(); print IN "$cmd\n"; $entry->delete(0,'end'); }

Replies are listed 'Best First'.
Re: Another Perl/Tk Unix Question
by graff (Chancellor) on May 31, 2008 at 15:53 UTC
    Check out "Tk::bind". It'll go something like this:
    $mw->bind( 'Tk::Entry', '<Enter>', \&send_to_shell );
    (or it can be called as a method of the specific Entry widget where you want this to happen). I borrowed that line from a Tk "cryptogram" script that I posted here several years ago (it still works): Tk cryptogram (no, not cryptography)
Re: Another Perl/Tk Unix Question
by pc88mxer (Vicar) on May 31, 2008 at 15:58 UTC
    Just specify a binding for the <Return> event on your Entry widget:
    ... $entry->bind('<Return>', \&send_to_shell); ...
Re: Another Perl/Tk Unix Question
by gator456 (Novice) on May 31, 2008 at 22:18 UTC
    Thank you very much for the reply. This really helps. I have a question.

    Why do you use open3 ( \*IN, \*OUT, \*ERR, ...)
    vs what is in the OReilly Perl Cookbook:
    open3 ($cmd_in, $cmd_out, $cmd_err, $cmd);