Thread array reference+2
(13 answers)
Opened by Graf Herschel at 2015-12-28 14:36
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.
|