Procedural PerlΒΆ
This example illustrates a how Taco can be used to interact with procedural Perl modules — importing them, calling functions, and interacting with variables.
Calling functions to perform calculations
We begin by importing the
Taco
class and constructing an instance of it which launches a Perl sub-process. Now we can calculate the sine of 30 degrees by calling Perl’ssin
subroutine (from theCORE::
namespace). This should give the expected value of a half.from taco import Taco taco = Taco(lang='perl') print('{0:.2f}'.format( taco.call_function('CORE::sin', radians(30)) ))
0.50
Importing modules
To make use of routines from other modules, they must be imported into the Perl interpreter running in the sub-process. The appropriate action to do this can be sent using the
import_module()
method. In the case of the Perl server, any arguments to this method are passed to the equivalent of ause
statement. This allows us to bring themd5_hex
subroutine into the current scope.taco.import_module('Digest::MD5', 'md5_hex') print( taco.call_function('md5_hex', 'Hello from Taco') )
9442d82de2303664e42b60e103c0ead4
A more convenient way to call functions
Another way to call a function through Taco is by creating a convenience callable for it. The
function()
method, given the name of a function to be called, returns an object which can be called to invoke that function.md = taco.function('md5_hex') print( md('Useful for calling the same function multiple times') )
47a533e6b83934f58c976de5f2b2dc5a
Getting values
We can retrieve the value of variables using
get_value()
. In this example, importing the “English” module gives a readable name for the variable containing the operating system name.taco.import_module('English') print( taco.get_value('$OSNAME') )
linux
Setting values
set_value()
can be used to assign a variable on the server side. In the case of Perl, setting the output field separator variable$,
will configure the spacing between things which are printed out.taco.set_value('$,', '**')
At this stage we can make use of some object-oriented code to check that the setting of
$,
has taken effect. For more information about using Taco with object-oriented Perl modules, see the object-oriented Perl example. Here we print the strings'X'
,'Y'
and'Z'
to an IO::String object and check the result.taco.import_module('IO::String') s = taco.construct_object('IO::String') s.call_method('print', 'X', 'Y', 'Z') s.call_method('pos', 0) print(s.call_method('getline'))
X**Y**Z