sig
  type sv
  type av
  type hv
  exception Perl_failure of string
  val int_of_sv : Perl.sv -> int
  val sv_of_int : int -> Perl.sv
  val float_of_sv : Perl.sv -> float
  val sv_of_float : float -> Perl.sv
  val string_of_sv : Perl.sv -> string
  val sv_of_string : string -> Perl.sv
  val bool_of_sv : Perl.sv -> bool
  val sv_of_bool : bool -> Perl.sv
  val sv_is_true : Perl.sv -> bool
  val sv_is_undef : Perl.sv -> bool
  val sv_undef : unit -> Perl.sv
  val sv_true : unit -> Perl.sv
  val sv_false : unit -> Perl.sv
  val sv_yes : unit -> Perl.sv
  val sv_no : unit -> Perl.sv
  type sv_t =
      SVt_NULL
    | SVt_IV
    | SVt_NV
    | SVt_PV
    | SVt_RV
    | SVt_PVAV
    | SVt_PVHV
    | SVt_PVCV
    | SVt_PVGV
    | SVt_PVMG
  val sv_type : Perl.sv -> Perl.sv_t
  val string_of_sv_t : Perl.sv_t -> string
  val reftype : Perl.sv -> Perl.sv_t
  val address_of_sv : Perl.sv -> Stdlib.Nativeint.t
  val address_of_av : Perl.av -> Stdlib.Nativeint.t
  val address_of_hv : Perl.hv -> Stdlib.Nativeint.t
  val scalarref : Perl.sv -> Perl.sv
  val arrayref : Perl.av -> Perl.sv
  val hashref : Perl.hv -> Perl.sv
  val deref : Perl.sv -> Perl.sv
  val deref_array : Perl.sv -> Perl.av
  val deref_hash : Perl.sv -> Perl.hv
  val av_empty : unit -> Perl.av
  val av_of_sv_list : Perl.sv list -> Perl.av
  val av_push : Perl.av -> Perl.sv -> unit
  val av_pop : Perl.av -> Perl.sv
  val av_shift : Perl.av -> Perl.sv
  val av_unshift : Perl.av -> Perl.sv -> unit
  val av_length : Perl.av -> int
  val av_set : Perl.av -> int -> Perl.sv -> unit
  val av_get : Perl.av -> int -> Perl.sv
  val av_clear : Perl.av -> unit
  val av_undef : Perl.av -> unit
  val av_extend : Perl.av -> int -> unit
  val av_map : (Perl.sv -> 'a) -> Perl.av -> 'a list
  val list_of_av : Perl.av -> Perl.sv list
  val av_of_string_list : string list -> Perl.av
  val hv_empty : unit -> Perl.hv
  val hv_set : Perl.hv -> string -> Perl.sv -> unit
  val hv_get : Perl.hv -> string -> Perl.sv
  val hv_exists : Perl.hv -> string -> bool
  val hv_delete : Perl.hv -> string -> unit
  val hv_clear : Perl.hv -> unit
  val hv_undef : Perl.hv -> unit
  val hv_of_assoc : (string * Perl.sv) list -> Perl.hv
  val assoc_of_hv : Perl.hv -> (string * Perl.sv) list
  val hv_keys : Perl.hv -> string list
  val hv_values : Perl.hv -> Perl.sv list
  type he
  val hv_iterinit : Perl.hv -> Stdlib.Int32.t
  val hv_iternext : Perl.hv -> Perl.he
  val hv_iterkey : Perl.he -> string
  val hv_iterval : Perl.hv -> Perl.he -> Perl.sv
  val hv_iternextsv : Perl.hv -> string * Perl.sv
  val get_sv : ?create:bool -> string -> Perl.sv
  val get_av : ?create:bool -> string -> Perl.av
  val get_hv : ?create:bool -> string -> Perl.hv
  val call : ?sv:Perl.sv -> ?fn:string -> Perl.sv list -> Perl.sv
  val call_array : ?sv:Perl.sv -> ?fn:string -> Perl.sv list -> Perl.sv list
  val call_void : ?sv:Perl.sv -> ?fn:string -> Perl.sv list -> unit
  val eval : string -> Perl.sv
  val call_method : Perl.sv -> string -> Perl.sv list -> Perl.sv
  val call_method_array : Perl.sv -> string -> Perl.sv list -> Perl.sv list
  val call_method_void : Perl.sv -> string -> Perl.sv list -> unit
  val call_class_method : string -> string -> Perl.sv list -> Perl.sv
  val call_class_method_array :
    string -> string -> Perl.sv list -> Perl.sv list
  val call_class_method_void : string -> string -> Perl.sv list -> unit
end