Path: usenet.cis.ufl.edu!usenet.eel.ufl.edu!newsfeed.internetmci.com!in2.uu.net!gasco!nntp.teleport.com!usenet From: pfeifer@charly.informatik.uni-dortmund.de (Ulrich Pfeifer) Newsgroups: comp.lang.perl.announce,comp.lang.perl.misc Subject: Announcing Math::Mathematica 1.0.4 Followup-To: comp.lang.perl.misc Date: 24 Nov 1995 14:42:04 GMT Organization: University of Dortmund, Germany Lines: 197 Approved: merlyn@stonehenge.com (comp.lang.perl.announce) Message-ID: <494ljs$nhq@maureen.teleport.com> Reply-To: pfeifer@charly.informatik.uni-dortmund.de NNTP-Posting-Host: linda.teleport.com X-Disclaimer: The "Approved" header verifies header information for article transmission and does not imply approval of content. Xref: usenet.cis.ufl.edu comp.lang.perl.announce:192 comp.lang.perl.misc:12773 Hi all! Here is my first try in interfacing Mathematica to Perl. It is still very basic now. But if someone else is thinking about that, he/she will know no that he/she is not alone ;-) You can get the packet soon from your nearest CPAN site as: Math-Mathematica-1.0.4.tar.gz Appended the (even more basic) documentation. If you need more details, look in the Mathematica.xs file. If you want more functions supported try the mh2xs on your mathlink.h and append the stuff to the xs file. By the way 'Math::Mathematica' is really long. Any suggestions for an alternate name? Ulrich ------------------------------------------------------------------------ MATHEMATICA(1) MATHEMATICA(1) NAME Math::Mathematica - Communicate to Mathematica via MathLink SYNOPSIS use Math::Mathematica; $link = new Math::Mathematica( MathLink args ) DESCRIPTION This is a very basic interface to the MathLink library of Mathematica. Mathematica is registered trademark of Wolfram Research, Inc. I use version 2.2. There are tree groups of functions. As-Is functions Some functions have the same interface as in MathLink itself. For example int MLPutSymbol(MLINK, char*); Can be called from Perl like: Math::Mathematica::PutSymbol($link,"FooBar"); I recommend to use the OO-Syntax: $link->PutSymbol("FooBar"); More perlish functions There are a couple of functions in MathLink which return a error code and deliver results via reference parameters. int MLGetSymbol(MLINK, char**); the Perl versions of these functions return the result as result of the function. If the return code of the MathLink function indicates an error, undef is returned instead. You can use defined to disambiguate undef and 0 for functions returning numeric values. if (defined($result = $link->GetSymbol)) { .... } Convenience functions In Mathematica.pm there are few functions to support OO-style syntax. new Is an alias for open. It takes a list of named arguments as the math of Mathematica program does. To use launch mode use e.g.: $link = new Math::Mathematica('-linkname', "math -mathlink", '-linkmode', 'launch'); If you want to connect over TCP enter the following line in a shell to start the server math -linkmode listen -linkprotocol TCP -linkname 3000 -mathlink and use this in your script to connect: $link = new Math::Mathematica('-linkname', '3000', '-linkmode', 'Connect', '-linkhost', 'schroeder', '-linkprotocol', 'TCP', ); DESTROY Is an alias For Close. So you do not need to close a connection - Perl will do it for you. Call Takes a list of arguments. The first is assumed to be a Mathematica function name, the rest the arguments to pass to Mathematica. Arguments may be numbers, strings or array references. The latter is assumed to point to a argument list for another function call. Perhaps the following example helps to clarify this: $e = $link->Call('N', ['Exp',1], 20); Since Call is written in Perl, there is no way to distinguish between "1234" and 1234. So the functions guesses that you meant String if the argument contained a letter. Perhaps someone will write Call as xsub? Result Looks for a result from Mathematica and returns it. Caution this function just handles the most frequent cases. It dies if it runs in an unknown case ;-( $link->PutSymbol('$Version'); $link->EndPacket(); $version = $link->Result(); BUGS Doubless many. The tests complain about acessing uninitialized values when testing the aruments for references: if (ref($_) eq 'ARRAY') ... This seems to be a bug of my perl version rather than one of PutCall. Contribute That is it for now. Let me know if somebody uses this (1) and is willing to test (2) or to contribute (3). The latter is preferred ;-) AUTHOR Ulrich Pfeifer 3 -- Ulrich UNIVERSITAET-DORTMUND telefax: 49 231 755 2405 ///// Pfeifer Lehrstuhl Informatik VI voice: 49 231 755 3032 ____UNI DO @RR D-44221 Dortmund postbox: 50 05 00 \\*\\//// http://ls6-www.informatik.uni-dortmund.de/WhoIsWhoAtLS6.html \\\\\// .