---
name: "Tk::EvenTk"
section: "3pm"
platform: "linux"
package: "perl-tk"
version: "1:800.015-1"
release: "Debian 2.2 (Potato)"
platforms: ["linux"]
url: "https://new.carta.tech/Tk::EvenTk"
---

# Tk::EvenTk(3pm)

ToolKit for Events

## NAME

Tk::Event - ToolKit for Events

## SYNOPSIS use Tk::Event;

```
 Tk::Event->fileevent(\*FH, 'readable' => callback);
```

```
 Tk::Event->lineavail(\*FH, callback);
```

```
 use Tk::Event::Signal qw(INT);
```

```
 $SIG{'INT'} = callback;
```

```
 use Tk::Event::process;
```

```
 Tk::Event->proc($pid, callback);
```

```
 QueueEvent(callback [, position])

```

## DESCRIPTION

That is better than nothing but still hard to use. Most scripts want higher level result (a line, a "block" of data etc.)

So it has occured to me that we could use new-ish TIEHANDLE thus:

my `$obj` = tie SOMEHANDLE,Tk::Event::IO;

while (\<SOMEHANDLE\>)\
  {\
  }

Then the READLINE routine registers a callback and looks something like:

sub READLINE\
  {\
   my `$obj` = shift;\
   Event-\>*io*(\*$obj,'readable',sub { sysread(\*$obj,${\*$obj},1,length(${\*$obj}) });\
   my `$pos`;\
   while (($pos = *index*(${\*$obj},$/) \< 0)\
    {\
     *DoOneEvent()*;\
    }\
   Event-\>*io*(\*$obj,'readable',''); # unregister \
   `$pos` += *length*($/);\
   my `$result` = *substr*(${\*$obj},0,$pos);\
   *substr*(${\*$obj},0,$pos) = '';\
   return `$result`;\
  }

This is using the scalar part of the glob representing the \_inner\_ IO as a buffer in which to accumulate chars.

```

```
