Thread array reference+2 (13 answers)
Opened by Graf Herschel at 2015-12-28 14:36

murphy
 2015-12-28 18:13
#183286 #183286
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Hier mal als Beispiel Code der read-only Arrayslices mit Hilfe von tie implementiert:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
use 5.012;

package ArraySlice;
use base qw(Tie::Array);

sub new {
    my ($Self, $base, $offset, $length) = @_;
    bless { base => $base, offset => $offset, length => $length }, $Self;
}

sub newref {
    my ($Self, @args) = @_;
    tie my @slice, $Self, @args;
    return \@slice;
}

sub TIEARRAY {
    my ($Self, @args) = @_;
    return $Self->new(@args);
}

sub EXISTS {
    my ($self, $index) = @_;
    return 0 <= $index && $index < $self->{length};
}

sub FETCH {
    my ($self, $index) = @_;
    if ($self->EXISTS($index)) {
        return $self->{base}->[$self->{offset} + $index];
    }
    else {
        return undef;
    }
}

sub FETCHSIZE {
    my ($self) = @_;
    return $self->{length};
}

package main;

my @foo = qw(oans zwoa dreie fiare finwe);
my $slice = ArraySlice->newref(\@foo, 1, 3);

say foreach @$slice;


Die Erweiterung um Methoden, die das ursprüngliche Array verändern, bleibt dem Leser als Übungsaufgabe überlassen ;-)
When C++ is your hammer, every problem looks like your thumb.

View full thread array reference+2