Re: Conversational programming in Perl for EMC
- Subject: Re: Conversational programming in Perl for EMC
- From: "Matt Shaver" <mshaver-at-erols.com>
- Date: Wed, 10 May 2000 00:46:29 -0400
- Cc: <CAD_CAM_EDM_DRO-at-egroups.com>
- Content-Transfer-Encoding: 7bit
- Content-Type: text/plain; charset=ISO-8859-1
> From: Fred Proctor <frederick.proctor-at-nist.gov>
> Something equivalent can be done in Perl. I have never done this, but I
> see from the O'Reilly Perl book, 2nd Edition, on page 371 that there are
> references to man pages for perlxstut, perlxs, perlguts, and perlcall
> that describe this. XS is a preprocessor that spits out the glue
> routines that tie C++ into Perl.
>
> Rather than waiting for me to never get around to it, this could be a
> plan for Perl-ifying the EMC:
>
> 1. Someone with Perl experience extends Perl with a C++ function that
> just increments its argument, e.g.,
>
> int myfunc(int arg)
> {
> return arg + 1;
> }
>
> and then does the gluing to the string "myfunc" so if you do this in a
> Perl script:
>
> print myfunc(2)
>
> it prints 3. Forgive my Perl syntax.
>
> 2. Once this is done...
OK, it's done.
1. I found that how to do this is described in simple enough terms (even for
me!) in the perlxstut manpage which is available at:
http://www.perl.com/pub/doc/manual/html/pod/perlxstut.html
and by typing 'man perlxstut' at any convenient linux command prompt.
2. I made a scratch directory to work in and then followed the directions in
the manpage, mainly examples 1 and 2. I edited two of the files created by
the h2xs program:
Filename: Mytest.xs
<SOF>
#ifdef __cplusplus
extern "C" {
#endif
#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"
#ifdef __cplusplus
}
#endif
MODULE = Mytest PACKAGE = Mytest
<NOTE> I added the stuff between here and EOF </NOTE>
int
myfunc(arg)
int arg
CODE:
RETVAL = arg +1;
OUTPUT:
RETVAL
<EOF>
Filename: test.pl
<SOF>
# Before `make install' is performed this script should be runnable with
# `make test'. After `make install' it should work as `perl test.pl'
######################### We start with some black magic to print on failure.
# Change 1..1 below to 1..last_test_to_print .
# (It may become useful if the test is moved to ./t subdirectory.)
BEGIN { $| = 1; print "1..1\n"; }
END {print "not ok 1\n" unless $loaded;}
use Mytest;
$loaded = 1;
print "ok 1\n";
######################### End of black magic.
# Insert your test code below (better if it prints "ok 13"
# (correspondingly "not ok 13") depending on the success of chunk 13
# of the test code):
<NOTE> I added the one line between here and EOF </NOTE>
print "myfunc(2) = ", &Mytest::myfunc(2), "\n";
<EOF>
Running the test per the instructions produced the following output:
<OUTPUT>
[root-at-LINUX Mytest]# make test
PERL_DL_NONLAZY=1 /usr/bin/perl -I./blib/arch -I./blib/lib
-I/usr/lib/perl5/i386-linux/5.00405 -I/usr/lib/perl5 test.pl
1..1
ok 1
myfunc(2) = 3
</OUTPUT>
So, it works. Now what?
Matt
P.S. You have to wonder if this is going to work for Perl under Windows!
make...?
Date Index |
Thread Index |
Back to archive index |
Back to Mailing List Page
Problems or questions? Contact