=head1 NAME Inline::SLang - Write Perl subs in S-Lang. =head1 SYNOPSIS print "9 + 16 = ", add(9,16), "\n"; print "9 - 16 = ", subtract(9,16), "\n"; print JAxH('Inline'), "\n"; use Inline SLang; __END__ __SLang__ define add (a,b) { return a + b; } define subtract (a,b) { return a - b; } define JAxH () { variable type = (); return "Just Another " + string(type) + " Hacker!"; } =head1 DESCRIPTION *** *** This is currently a pre alpha release. *** Use at your own risk *** The C module allows you to put S-Lang source code directly "inline" in a Perl script or module. It sets up an in-process S-Lang interpreter, runs your code, and then examines the interpreter's symbol table, looking for things to bind to Perl. The process of interrogating the S-Lang interpreter only occurs the first time you run your S-Lang code. The namespaces are cached, and subsequent calls use the cached version. Of course, your S-Lang code must still be run every time your run the Perl script -- but Inline::S-Lang already knows the results of running it. =head1 What is S-Lang? From the S-Lang library home page at http://www.s-lang.org/ S-Lang is a multi-platform programmer's library designed to allow a developer to create robust multi-platform software. It provides facilities required by interactive applications such as display/screen management, keyboard input, keymaps, and so on. The most exciting feature of the library is the slang interpreter that may be easily embedded into a program to make it extensible. Programs using version 1.X of the S-Lang library must be distributed either under the terms of the GNU General Public License, or under the terms of the Artistic License. =head1 Using the Inline::SLang Module Using Inline::SLang will seem very similar to using any other Inline language, thanks to Inline's consistent look and feel. This section will explain the different ways to use Inline::SLang. For more details on C, see 'perldoc Inline'. =head2 Importing Functions *** *** currently only user-defined functions in the 'Global' namespace *** are bound to Perl *** Using functions defined in S-Lang is just like using Perl subs. You just supply the source code to Inline::SLang, and then use them. use Inline SLang => <<'END'; define doit() { ... } END doit(); Issues are: - do we bind the intrinsic functions? - do we bind functions in namespaces other than "Global"? If so, how do we access them from perl ? * as namespace::function() * as $object->function() =head2 Importing Variables Should we bind S-Lang variables, and if so as read-only or read-write? =head1 Supported Data Types *** *** Guess what, it's not seamless at the moment! *** Inline::S-Lang seamlessly converts between most types of Perl and S-Lang data types. See the L document for more information on how the various data types are supported. The module currently assumes that yor S-Lang library has been compiled with support for both floating-point and complex numbers. =head1 SUPPORTED PLATFORMS *** *** requirements not yet fixed in stone *** The module is designed to work with version 1.4.x of the S-Lang library, although I make no promises for anything earlier than 1.4.4. S-Lang versions tested: 1.4.0 (linux), 1.4.4 (solaris), 1.4.7 (linux & solaris) Inline::S-Lang has so far been tested on Linux and Solaris 2.8 only. It should work on UNIX platforms; I would be surprised if it works without tweaking on other systems. Perl versions tested: 5.6.1 (solaris), 5.8.0 (linux) It is intended to support Perl versions >= 5.6.0 only (at least the release versions rather than the development releases). It is not clear yet whether we really need any >= 5.6.0 functionality, but this restriction does make testing/developing a lot easier for me. =head2 S-Lang Configuration Options *** *** Currently there are no options for S-Lang *** (ie only the standard Inline ones) *** For information on how to specify Inline configuration options, see L. This section describes each of the configuration options available for S-Lang. One possible option would be to allow the S-Lang code to be byte-compiled, which may provide a speed-improvement when loading. =head1 SEE ALSO L For information about using C, see L. For information about other Inline languages, see L. For information about S-Lang see C. =head1 BUGS AND DEFICIENCIES This is I release code. So there will be lots of bugs and deficiencies by design... =head1 WARRANTY There is no warranty. I take no responsibility for anything that might happen if you try to install and/or use this module. =head1 ACKNOWLEDGEMENTS John Davis (for S-Lang), Brian Ingerson (for the Inline framework), and Neil Watkiss since I stole virtually everything from his L and L modules. However, please do not assume that any errors in this module are in any way related to the above people. =head1 AUTHOR Doug Burke =head1 COPYRIGHT Copyright (c) 2003, Doug Burke. All Rights Reserved. This module is free software. It may be used, redistributed and/or modified under the same terms as Perl itself. See http://www.perl.com/perl/misc/Artistic.html.