"Scooby" - the internal machinery that works with Mobile::Location and Mobile::Executive to provide a mobile agent execution and location environment for the Perl Programming Language.


4.0x (versions 1.x and 2.x were never released; version 3.x did not support encryption and authentication).


perl -d:Scooby mobile_agent


This is an internal module that is not designed to be "used" directly by a program. Assuming a mobile agent called multiwho exists (that "uses" the Mobile::Executive module), this module can be used to execute it, as follows:

    perl -d:Scooby multiwho

The -d switch to perl invokes Scooby as a debugger. Unlike a traditional debugger that expects to interact with a human, Scooby runs automatically. It NEVER interacts with a human, it interacts with the mobile agent machinery.

Scooby can be used to relocate Perl source code which contains the following:

    SCALARs (both numbers and strings).

    An ARRAY of SCALARs (known as a simple ARRAY).

    A HASH of SCALARs (known as a simple HASH).

    References to SCALARs.

    References to a simple ARRAY.

    References to a simple HASH.


    References to objects are not supported and are in no way guaranteed to behave the way you expect them to after relocation (even though they do relocate).

    The relocation of more complex data structures is not supported at this time (refer to the TO DO LIST section, below).

Internal methods/subroutines

    DB::DB - called for every executable statement contained in the mobile agent source code file.

    DB::sub - called for every subroutine call contained in the mobile agent source code file.

    _DB::storable_decode - takes the stringified output from Storable's thaw subroutine and turns it back into Perl code (with a little help from Data::Dumper for objects).

    DB::_check_modules_on_remote - checks to see if a list of modules/classes "used" within the mobile agent actually exist on the remote Location's Perl system.

    DB::_get_store_pkplus - contacts the key server and requests a PK+, then stores the PK+ in a named disk-file.

    DB::_wait_for_pkplus_confirm - repeatedly contacts the key server until requested PK+ is returned (i.e., ACKed).


This module must be installed in your Perl system's Devel/ directory. This module will only work on an operating system that supports the Perl modules listed in the SEE ALSO section, below. (To date, I've only tested it on various Linux distributions).


Loads. The biggest item on the list would be to enhance Scooby to allow it to handle more complex data structures, such as ARRAYs of HASHes and HASHes of ARRAYs, etc., etc.

My initial plan was to allow for the automatic relocation of open disk-files. However, on reflection, I decided not to do this at this time, but may return to the idea at some stage in the future.

The current implementation checks to see if "used" classes are available on the next Location before attempting relocation, but does not check to see if "used" modules are available. It would be nice if it did.

It would also be nice to incorporate an updated Class::Tom (by James Duncan) to handle the relocation of objects to a Location without the need to have the module exist on the remote Location. On my system (Linux), the most recent Class::Tom generates compile/run-time errors.


The Mobile::Executive module and the Mobile::Location class. Internally, this module uses the following CPAN modules: PadWalker and Storable, in addition to the standard Data::Dumper module. The Crypt::RSA modules provides encryption and authentication services.

The Scooby Website:


Paul Barry, Institute of Technology, Carlow in Ireland,,


Copyright (c) 2003, Paul Barry. All Rights Reserved.

This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself.