Listing 1: Example code using PerlStream and PerlValue
PerlStream ps; // Have Perl do simple addition in a scalar context ps << "10+5" << perl_execute; int fifteen = ps[0]; // Return a list of values, including a hash reference ps.array() << "(2,5,{'a'=>'foo', 'b'=>'bar'})" << perl_execute; int two = ps[0]; // line 9 double five = ps[-2]; // line 10 string foo = ps[2]["a"]; // line 11 ps.voidc() << "require Cwd;" << perl_execute; // void context // Bad string of references are tolerated int undefined = ps[0]["a"][-3]["bar"]; // line 16; undefined = 0 // iterate over an array and hash ps.array() << "( [4, 9, 16], {'a'=>25, 'b'=>36, 'c'=>49} )" << perl_execute; PerlValue::array_iter ai; // line 21 for (ai = ps[0].array_begin(); ai != ps[0].array_end(); ++ai) { if (ai->isInt()) cout << "Value = " << static_cast<int>(*ai) << endl; } PerlValue::hash_iter hi; // line 26 for (hi = ps[1].hash_begin(); hi != ps[1].hash_end(); ++hi) { cout << "Key=" << hi->first << " Val=" << hi->second << endl; } // Cause an evaluation exception ps.setExceptionFlags(PerlStream::eEvalFail); try { // line 33 ps << "[ 10, 15" << perl_execute; // Missing ']' } catch (exception &e) { cerr << "Error: " << e.what() << endl; // e is PerlEvalError } End of Listing