Skip to content
Embed Perl in Go. This works, but was a joke for a presentation. Don't use.
Go C Makefile
Branch: master
Clone or download
bradfitz Merge pull request #5 from Code-Hex/master
Fixed an issue that cannot be built
Latest commit 8b295ce Dec 8, 2016
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
perl Added perl/campher.h Dec 7, 2016
.gitignore rename files, split c into its own file Apr 23, 2011
README Modified the installation method Dec 7, 2016

README

What do you get when you cross a Camel with a Gopher?

Campher!

Perl in Go.

Example of the awesomeness / horror:

=========
 INSTALL
=========

$ go get github.com/bradfitz/campher

=========
 EXAMPLE
=========

package main

import (
	"fmt"
	"strings"

	"github.com/bradfitz/campher/perl"
)

func main() {
	p := perl.NewInterpreter()
	p.Eval(`$foo = "bar";`)
	fmt.Println("foo is:", p.EvalString("$foo"))

	cv := p.Eval(`sub { my ($a1, $a2, $func) = @_; $func->($a1, $a2); }`).CV()
	var ret *SV
	p := perl.NewInterpreter()
	foo := p.Eval(`$foo = sub {
 my ($op, $v1, $v2) = @_;
 return "Perl says: " . $op->($v1, $v2);
};`)
	concat := func(a, b string) string { return a + b }
	fmt.Println("concat:", foo.CV().Call(concat, "foo", "bar"))

	base := 0
	add := func(a, b int) int {
		base++
		return a + b + base
	}
	fmt.Println("add:", foo.CV().Call(add, 1, "40"))
	fmt.Println("add:", foo.CV().Call(add, 1, "40"))
}


================
 EXAMPLE OUTPUT
================

concat: Perl says: foobar
add: Perl says: 42
add: Perl says: 43
You can’t perform that action at this time.