Class: Perl::Value::Scalar

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

Defined Under Namespace

Classes: SV

Class Method Summary collapse

Instance Method Summary collapse

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

#derefObject



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

Returns:

  • (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_perlObject



106
107
108
# File 'lib/perl/value/scalar.rb', line 106

def to_perl
  @sv ||= Perl.Perl_newSVpv(@perl, @scalar, @scalar.length)
end

#valueObject



110
111
112
# File 'lib/perl/value/scalar.rb', line 110

def value
  @scalar ||= @sv ? @sv.value : nil
end