View on
MetaCPAN is shutting down
For details read Perl NOC. After June 25th this page will redirect to
Daisuke Murase > Cocoa-EventLoop-0.04 > Cocoa::EventLoop



Annotate this POD

View/Report Bugs
Module Version: 0.04   Source  


Cocoa::EventLoop - perl interface for Cocoa event loop.


    use Cocoa::EventLoop;
    # on-shot timer
    my $timer = Cocoa::EventLoop->timer(
        after => 10,
        cb    => sub {
            # do something
    # repeatable timer
    my $timer = Cocoa::EventLoop->timer(
        after    => 10,
        interval => 10,
        cb       => sub {
            # do something
    # stop or cancel timers
    undef $timer;
    # I/O Watcher
    my $io = Cocoa::EventLoop->io(
        fh   => *STDIN,
        poll => 'r',
        cb   => sub {
            warn 'read: ', <STDIN>;
    # run main loop
    # run main loop for specified period.


This module provides perl interface for Cocoa's event loop, NSRunLoop. And also provides some timers and io watchers within the loop.

If you want to use or write some modules that depends Cocoa event loop, using this module is easiest way. For example, Cocoa::Growl is possible to handle click event when it runs with this module:

    use Cocoa::EventLoop;
    use Cocoa::Growl;
    my $done = 0;
        name        => 'Notification Name',
        title       => 'Hello',
        description => 'Cocoa World!',
        on_click    => sub {
        on_timeout => sub {
    Cocoa::EventLoop->run_while(0.1) while !$done;

If you write more complicated script, consider using AnyEvent::Impl::NSRunLoop instead of using this module directly. AnyEvent::Impl::NSRunLoop is a wrapper for Cocoa::EventLoop and AnyEvent. If you use AnyEvent::Impl::NSRunLoop, you can use any AnyEvent based modules in Cocoa's event loop.



    $timer = Cocoa::EventLoop->timer(after => <seconds>, cb => <callback>);
    $timer = Cocoa::EventLoop->timer(
        after    => <fractional_seconds>,
        interval => <fractional_seconds>,
        cb       => <callback>,

Create one-shot or repeat timer.

Available parameters are:


    $io = Cocoa::EventLoop->io(
        fh   => <filehandle_or_fileno>,
        poll => <"r" or "w">,
        cb   => <callback>,

Create I/O watcher. Available parameters are:


Start Cocoa main loop.

This method exits immediately when no input sources or timers are attached to the loop, but Mac OS X can install and remove additional input sources as needed, and those sources could therefore prevent the run loop from exiting.

If you want the run loop to terminate, you shouldn't use this method. Instead, use one of the other run methods and also check other arbitrary conditions of your own, in a loop. A simple example would be:

    my $should_keep_running = 0; # global
    Cocoa::EventLoop->run_while(0.1) while $should_keep_running;


Run Cocoa main loop only while specified seconds.


Daisuke Murase <>


Copyright (c) 2009 by KAYAC Inc.

This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.

The full text of the license can be found in the LICENSE file included with this module.

syntax highlighting: