Below is the Foo code from setting DEBUG in OIO.
From line 101 in 28-lvalue.t
$obj->set_foo1() = $b2;
In the eclipse debugger I am seeing $rv set to 1 on line 3. $wobj set to '' and then the error gets called at line 5.
I can't see why line 3 returns what it does as Want::want_lvalue is not perl.
See below for variable values
I'd guess that this is a Want bug, but really I'm way over my head at this point.
if there is anything else I can provide, please let me know.
package Foo;
*Foo::set_foo1 = sub :lvalue {
my $rv = !Want::want_lvalue(0);
my $wobj = (Want::wantref() eq 'OBJECT');
if ((@_ < 2) && ($rv || $wobj)) {
OIO::Args->die(
'message' => q/Missing arg(s) to 'Foo->set_foo1'/,
'location' => [ caller() ]);
}
my $assign;
if (my @args = Want::wantassign(1)) {
@_ = ($_[0], @args);
$assign = 1;
}
if (@_ > 1) {
$field->[${$_[0]}] = $_[1];
Want::lnoreturn if $assign;
Want::rreturn($field->[${$_[0]}]) if $rv;
}
((@_ > 1) && $wobj && !Scalar::Util::blessed($field->[${$_[0]}])) ? $_[0] : $field->[${$_[0]}];
};
*Foo::get_foo1 = sub {
$field->[${$_[0]}];
};
28-lvalue.t Variables
$b1 Baz=SCALAR(0x3099108)-> 1
$b2 Baz=SCALAR(0x3098fa0)-> 2
$obj Foo=SCALAR(0x3099900)-> 1
$val Baz=SCALAR(0x3099108)-> 1
$val2 Baz=SCALAR(0x3099108)-> 1
OIO Variables:
$field ARRAY(0x1ee522c)...
[0] empty slot
[1] Baz=SCALAR(0x3099108)-> 1
%DEEP_CLONE <empty hash>
%DUMP_FIELDS ...
'Foo' HASH(0x30ee150)...
'bar1' ARRAY(0x316deb8)...
'bar2' ARRAY(0x316e284)...
'bar3' ARRAY(0x316e188)...
'baz1' ARRAY(0x316ddbc)...
'baz2' ARRAY(0x30cbef4)...
'baz3' ARRAY(0x30f17d8)...
'get_foo1' ARRAY(0x3188800)...
'get_foo2' ARRAY(0x316e89c)...
'get_foo3' ARRAY(0x316e8f0)...
'num1' ARRAY(0x3007f38)...Cut...
'num2' ARRAY(0x310a428)...Cut...
'num3' ARRAY(0x30de9ac)...Cut...
%FIELD_TYPE ...
'ARRAY(0x3008154)' 'Baz'
'ARRAY(0x30081c0)' 'Baz'
'ARRAY(0x300822c)' 'Baz'
'ARRAY(0x30082a4)' 'NUMERIC'
'ARRAY(0x3008310)' 'NUMERIC'
'ARRAY(0x300837c)' 'NUMERIC'
%INIT_ARGS <empty hash>
%WEAK <empty hash>
@FIELD_TYPE_INFO ...
[0] ARRAY(0x30f646c)...
[0] ARRAY(0x300837c) <empty array>
[1] 'NUMERIC'
[1] ARRAY(0x30f1688)...
[0] ARRAY(0x3008310) <empty array>
[1] 'NUMERIC'
[2] ARRAY(0x310a02c)...
[0] ARRAY(0x30082a4) <empty array>
[1] 'NUMERIC'
[3] ARRAY(0x2ffdf78)...
[0] ARRAY(0x300822c) <empty array>
[1] 'Baz'
[4] ARRAY(0x30f16f4)...
[0] ARRAY(0x30081c0) <empty array>
[1] 'Baz'
[5] ARRAY(0x2ffe4dc)...
[0] ARRAY(0x3008154) <empty array>
[1] 'Baz'