The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
print "1..8"

import perl

# try to use perl as a simple calculator
if not perl.eval("3+3") == 6: print "not",
print "ok 1"

# can we pass strings back
if not perl.eval("substr('abcd', 0, 3)") == "abc": print "not",
print "ok 2"

# can we pass hashes both ways
if perl.MULTI_PERL:
    print "actually skipping test 3..."
    print "ok 3"
else:
    perl.eval("sub foo_elem { shift->{foo} }")
    hash = perl.eval("{ foo => 42 }")

    if not perl.call("foo_elem", hash) == 42: print "not",
    print "ok 3"

# try to trap exceptions
try:
	perl.eval("die 'Oops!'")
except perl.PerlError, val:
	if str(val)[:5] != "Oops!": print "not",
	print "ok 4" 

try:
	perl.call("not_there", 3, 4)
except perl.PerlError, val:
	if str(val) != "Undefined subroutine &main::not_there called.\n":
		print "not",
	print "ok 5"


# try calling perl function in array and scalar context

# first define a function
perl.eval("""
   sub foo2 {
	wantarray ? (1, 2, 3) : 42;
   }
""")

# scalar context
if perl.call("foo2") != 42: print "not",
print "ok 6"

# array context (tuple back)
res = perl.call_tuple("foo2")
if len(res) != 3 or res[0] != 1 or res[1] != 2 or res[2] != 3: print "not",
print "ok 7"


# can we call anonymous perl functions
# can we pass hashes both ways
if perl.MULTI_PERL:
    print "actually skipping test 8..."
    print "ok 8"
else:
    func = perl.eval("sub { $_[0] + $_[1] }")
    if int(func(3, 4)) != 7: print "not",
    print "ok 8"