General examples from Inline::SLang
The following code and examples can be found in the Inline::SLang distribution available from CPAN. The output was created using version 1.00 of the module, using the PDL support, together with version 1.4.9 of the S-Lang library.
Order of evaluation
#
# Use this via 'perl -Mblib examples/order.pl'
#
use Inline 'SLang' => 'message("This is S-Lang");';
print "This is Perl\n";
which, when run, produces
This is S-Lang This is Perl
Trapping errors
#
# $Id: trap_errors.pl,v 1.1 2005/01/04 16:18:07 dburke Exp $
#
# Evaluate a S-Lang statement which contains an error
#
use strict;
use Inline 'SLang';
# Call the S-Lang function
#
my $ans;
eval { $ans = mydiv (0.0); };
print "The S-Lang error was:\n$@\n";
# Evaluate S-:ang code directly
#
eval { Inline::SLang::sl_eval( "10.0/0.0;" ); };
print "The S-Lang error was:\n$@\n";
__END__
__SLang__
define mydiv(y) { return 10.0 / y; }
which, when run, produces
The S-Lang error was: S-Lang Error: Divide by zero: Error while executing mydiv The S-Lang error was: S-Lang Error: Divide by zero: called from line 1, file: ***string***
What types are available?
The INFO option of the Inline module can be used to find out what S-Lang functions and datatypes are recognised by the module. The following example:
#
# Use this via 'perl -Mblib -MInline=info example/info.pl'
#
use Inline SLang;
# let's not actually do anything
__END__
__SLang__
typedef struct { foo, bar } FooBarStruct_Type;
variable foobar = "a string";
define foo() { return foobar; }
define bar(x) { foobar = x; }
produces the following output when the '-MInline=info' option is added to the Perl interpreter:
<-----------------------Information Section-----------------------------------> Information about the processing of your Inline SLang code: Your source code needs to be compiled. I'll use this build directory: /data/dburke2/www/perl-slang/examples/_Inline/build/info_pl_9cef and I'll install the executable as: /data/dburke2/www/perl-slang/examples/_Inline/lib/auto/info_pl_9cef/info_pl_9cef.sldat Configuration details --------------------- Version of S-Lang: 1.4.9 Perl module version is 1.00 and supports PDL The following S-Lang types are recognised: Int32_Type UInteger_Type _IntegerP_Type FooBarStruct_Type[Struct_Type] Int_Type Struct_Type ULong_Type FD_Type Long_Type Float_Type Array_Type UInt32_Type File_Type UInt_Type UChar_Type UShort_Type Double_Type Float64_Type Int16_Type Float32_Type Null_Type Integer_Type BString_Type Char_Type Undefined_Type Short_Type Any_Type Assoc_Type Ref_Type Complex_Type String_Type UInt16_Type DataType_Type The following S-Lang namespaces have been bound to Perl: 2 functions from namespace Global are bound to package main bar() foo() <-----------------------End of Information Section---------------------------->