(* Interface to Perl from OCaml.
* Copyright (C) 2003 Merjis Ltd.
- * $Id: perl.ml,v 1.3 2003-10-12 11:56:26 rich Exp $
+ * $Id: perl.ml,v 1.4 2003-10-12 17:33:14 rich Exp $
*)
type t
exception Perl_failure of string
-external init : unit -> unit = "perl4caml_init"
-let () =
+external c_init : unit -> unit = "perl4caml_init"
+let init () =
Callback.register_exception "perl4caml_perl_failure" (Perl_failure "");
- init () (* Initialise C code. *)
+ c_init () (* Initialise C code. *)
+
+external destroy : unit -> unit
+ = "perl4caml_destroy"
external create : ?args:string array -> unit -> t
= "perl4caml_create"
-external destroy : t -> unit
- = "perl4caml_destroy"
-
external set_context : t -> unit
= "perl4caml_set_context"
external sv_of_string : string -> sv = "perl4caml_sv_of_string"
external sv_is_true : sv -> bool = "perl4caml_sv_is_true"
external sv_is_undef : sv -> bool = "perl4caml_sv_is_undef"
-external sv_get_undef : unit -> sv = "perl4caml_sv_get_undef"
-external sv_get_yes : unit -> sv = "perl4caml_sv_get_yes"
-external sv_get_no : unit -> sv = "perl4caml_sv_get_no"
+external sv_undef : unit -> sv = "perl4caml_sv_undef"
+external sv_yes : unit -> sv = "perl4caml_sv_yes"
+external sv_no : unit -> sv = "perl4caml_sv_no"
+
+let sv_true () = sv_of_int 1
+let sv_false () = sv_of_int 0
+
+let bool_of_sv = sv_is_true
+let sv_of_bool b = if b then sv_true () else sv_false ()
+
+type sv_t = SVt_NULL
+ | SVt_IV
+ | SVt_NV
+ | SVt_PV
+ | SVt_RV
+ | SVt_PVAV
+ | SVt_PVHV
+ | SVt_PVCV
+ | SVt_PVGV
+ | SVt_PVMG
+
+external sv_type : sv -> sv_t = "perl4caml_sv_type"
-let sv_undef = sv_get_undef ()
-let sv_true = sv_get_yes ()
-let sv_false = sv_get_no ()
+external deref : sv -> sv = "perl4caml_deref"
external get_sv : ?create:bool -> string -> sv = "perl4caml_get_sv"