Class: Perl::Value::Scalar::SV

Inherits:
FFI::Struct
  • Object
show all
Defined in:
lib/perl/value/scalar.rb

Defined Under Namespace

Classes: SvU

Constant Summary collapse

SVt_NULL =
0
SVt_BIND =
1
SVt_IV =
2
SVt_NV =
3
SVt_RV =
4
SVt_PV =
5
SVt_PVIV =
6
SVt_PVNV =
7
SVt_PVMG =
8
SVt_PVGV =
9
SVt_PVLV =
10
SVt_PVAV =
11
SVt_PVHV =
12
SVt_PVCV =
13
SVt_PVFM =
14
SVt_PVIO =
15
SVTYPEMASK =
0xff
SVf_IOK =
0x00000100
SVf_NOK =
0x00000200
SVf_POK =
0x00000400
SVf_ROK =
0x00000800

Instance Method Summary collapse

Instance Method Details

#derefObject



62
63
64
65
66
# File 'lib/perl/value/scalar.rb', line 62

def deref
  raise "Not a reference!" unless (self[:sv_flags] & SVf_ROK) == SVf_ROK

  SV.new(self[:sv_u][:svu_rv]).value
end

#inspectObject



68
69
70
# File 'lib/perl/value/scalar.rb', line 68

def inspect
  "<#{self.class.name} @pointer=#{self.pointer} @sv_any=#{self[:sv_any].inspect} @sv_refcnt=#{self[:sv_refcnt].inspect} @sv_flags=0x#{self[:sv_flags].to_s(16)} @sv_u=#{self[:sv_u].inspect}>"
end

#reference?Boolean

Returns:

  • (Boolean)


58
59
60
# File 'lib/perl/value/scalar.rb', line 58

def reference?
  (self[:sv_flags] & SVf_ROK) == SVf_ROK
end

#valueObject



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/perl/value/scalar.rb', line 45

def value
  case
  when (self[:sv_flags] & SVf_POK) == SVf_POK
    self[:sv_u][:svu_pv]
  when (self[:sv_flags] & SVf_ROK) == SVf_ROK
    Perl::Value::Scalar.new(self[:sv_u][:svu_rv])
  when (self[:sv_flags] & SVTYPEMASK) == SVt_PVAV
    Perl::Value::Array.new(self)
  else
    raise "Don't know how to handle #{self[:sv_u]} (#{self.inspect})"
  end
end