CljPerl

 view release on metacpan or  search on metacpan

README.md  view on Meta::CPAN

	(coro-resume c)

	------------------

	> bin/cljp t.clp

## Install

	cpan install CljPerl

## Lisp <-> Perl

CljPerl is hosted on Perl. Any object of CljPerl can be passed into Perl and vice versa including code.

An example of using Perl's IO functions.

####### Perl functions in CljPerl.pm

	package CljPerl;
	
	sub open {
	  my $file = shift;
	  my $cb = shift;
	  my $fh;
	  open $fh, $file;
	  &{$cb}($fh);
	  close $fh;
	}
	
	sub puts {
	  my $fh = shift;
	  my $str = shift;
	  print $fh $str;
	}
	
	sub readline {
	  my $fh = shift;
	  return <$fh>;
	}
	
####### CljPerl functions in core.clp

	(ns file
	  (defn open [file cb]
	    (. open file cb))
	
	  (defn >> [fh str]
	    (. puts fh str))
	
	  (defn << [fh]
	    (. readline fh)))

####### Test

	(file#open ">t.txt" (fn [f]
	  (file#>> f "aaa")))
	
	(file#open "<t.txt" (fn [f]
	  (println (perl->clj (file#<< f)))))

An advanced example which creates a timer with AnyEvent.

	(. require AnyEvent)

	(def cv (->AnyEvent condvar))
	
	(def count 0)
	
	(def t (->AnyEvent timer
	  {:after 1
	   :interval 1
	   :cb (fn [ & args]
	         (println count)
	         (set! count (+ count 1))
	         (if (>= count 10)
	           (set! t nil)))}))
	
	(.AnyEvent::CondVar::Base recv cv)

Another example which uses AnyEvent::HTTPD to create a http server.

	(require anyevent-httpd)

	(anyevent-httpd#start-server {:port 9090}
	  {"/"     #[html #[body #[h1 "Hello World!"] #[a ^{:href "/test"} "Another test page"]]]
	  "/test"  #[html #[body #[h1 "Test page"] #[a ^{:href "/"} "Back to the main page"]]]})

## Documents

See APIs.md

## Quoi

Quoi is a simple web framework by CljPerl.

#### APP : app.clj

	; load quoi
	(require quoi)

	; load quoi menu utils
	(require quoi/menu)

	; create a menu
	(def menu (quoi#menu
	  ["Home" "home" (quoi#file "index.clp")]
	  ["About" "about" (quoi#file "about.clp")]))

	; set the index page.
	(quoi#page "/$"
	  (quoi#file "index.clp"))

	(quoi#start {:port 9090})

#### Template : index.clp

	#[span
	  #[h1 "hello world"]
	  #[p "url: " (#::path S)]
	  #[p "method: " (#::method S)]
	  #[p "params: " (clj->string (#::params S))]
	  #[p "headers: " (clj->string (#::headers S))] 
	  menu]

#### Run

	bin/cljp app.clj

#### XML selector/translator



( run in 0.944 second using v1.01-cache-2.11-cpan-39bf76dae61 )