CljPerl
view release on metacpan or search on metacpan
(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 )