Class: Perl::Value::Scalar
Defined Under Namespace
Classes: SV
Class Method Summary collapse
Instance Method Summary collapse
- #deref ⇒ Object
- #freeze! ⇒ Object
-
#initialize(args = nil) ⇒ Scalar
constructor
A new instance of Scalar.
- #reference? ⇒ Boolean
- #to_perl ⇒ Object
- #value ⇒ Object
Constructor Details
#initialize(args = nil) ⇒ Scalar
Returns a new instance of Scalar.
88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 |
# File 'lib/perl/value/scalar.rb', line 88 def initialize(args = nil) @perl = Perl.PL_curinterp @scalar = nil @sv = nil @deref = nil @is_ref = nil case args when FFI::Pointer @sv = SV.new(args) when String @scalar = args when nil else raise "Don't know how to handle #{args.class} (#{args.inspect})" end end |
Class Method Details
.to_perl(value) ⇒ Object
74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/perl/value/scalar.rb', line 74 def to_perl(value) case value when String Perl.Perl_newSVpv(Perl.PL_curinterp, value, value.length) when StringIO value = value.string Perl.Perl_newSVpv(Perl.PL_curinterp, value, value.length) when nil else raise "Don't know how to handle #{value.class} (#{value.inspect})" end end |
Instance Method Details
#deref ⇒ Object
122 123 124 |
# File 'lib/perl/value/scalar.rb', line 122 def deref @deref ||= to_perl.deref end |
#freeze! ⇒ Object
126 127 128 129 |
# File 'lib/perl/value/scalar.rb', line 126 def freeze! reference? ? self.deref.freeze! : self.value @sv = nil end |
#reference? ⇒ Boolean
114 115 116 117 118 119 120 |
# File 'lib/perl/value/scalar.rb', line 114 def reference? if @is_ref.nil? @is_ref = @sv.reference? else @is_ref end end |
#to_perl ⇒ Object
106 107 108 |
# File 'lib/perl/value/scalar.rb', line 106 def to_perl @sv ||= Perl.Perl_newSVpv(@perl, @scalar, @scalar.length) end |
#value ⇒ Object
110 111 112 |
# File 'lib/perl/value/scalar.rb', line 110 def value @scalar ||= @sv ? @sv.value : nil end |