The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

JSPL::Array - Reference to a JavaScript Array

DESCRIPTION

Arrays in JavaScript are actually Array-objects. When returned to Perl side, they are encapsulated in this class and, by default, tied to make them usable as a normal Perl array-references.

    ...
    my $arr = $ctx->eval(q|['foo', 'bar', 4]|);
    print $arr->[1];     # 'bar'
    print scalar @$arr;  # 3
    print shift @$arr;   # 'foo'
    print ref $arr;      # 'ARRAY'

    my $obj = tied @$arr;
    print ref $obj;      # 'JSPL::Array'

INTERFACE

When a JavaScript array, i.e an instance of Array, enters perl space the object is wrapped by reference as a instance of JSPL::Array.

For transparency, and if the AutoTie context option is TRUE, they will be tied to a perl ARRAY and instead of the JSPL::Array object, the array-reference is returned, so the regular perl ARRAY operations and functions will see a normal ARRAY.

All those ARRAYs are alive, that is, they refer to the original javascript array, .so if you modify them on one side, you are modifying both sides.

    ...
    my $arr = $ctx->eval(q{
        var Arr = ['foo', 'bar', 'baz'];
        Arr;
    });

    $arr->[1] = 'bor';
    pop @$arr;

    print $ctx->eval('Arr[1]');      # 'bor'
    print $ctx->eval('Arr.length');  # 2

    $ctx->eval(q{  Arr.push('fob') });
    print $arr->[2];                 # 'fob'

If you need the underlaying JSPL::Array object, it can be obtained using Perl's tied operator.

  my $jsarray = tied @$arr;

In javascript all arrays are objects, so this class inherits all JSPL::Object's features.

INSTANCE METHODS

length

Returns the length of the array.

shift
pop
push
unshift
sort
reverse

All performs the standard javascript array methods of the same name.