Ok, nochmla ganz wichtig: Array deklariert man mit *runden* Klammern:
my @array = ();
my @array2 = qw(1 2 4 5);
print $array2[0]; # Zugriff mit $
Hashes auch:
my %hash = ();
my %h2 = (
key => 'value',
);
print $h2{'key'}; # Zugriff mit $ und dem Schlüssel
Hashreferenzen deklariert man mit geschweiften Klammern:
my $hashref = {};
my $hashref2 = {
key => 'value',
};
print $hashref->{'key'}; # Zugriff mit $ + Dereferenzierung (->).
Arrays kannst du nicht in einem Hash als Wert speichern. Aber du kannst eine Referenz darauf speichern:
my @a = qw(1 2 3);
my %h = (
'key' => \@a,
);
print $h{'key'}->[0]; # Gibt das 1. Element von @a aus.
Zu Referenzen musst du dir
perldoc perlref durchlesen. Da kommst du nicht drumherum. Das ist so grundlegend wie Variablenzuweisung.
Konstruktoren sind in Perl nicht vordefiniert, genausowenig this. Wenn du eine Methode aufrufst:
dann ist das erste Argument des Aufrufs das, was links vom -> steht, nämlich $objekt. Und das ist auch das, was du immer als erstes in den Methoden auslesen solltest:
=head2 method()
Deine Beschreibung der Methode. Funktioniert so ähnlich wie Doxygen, nennt sich aber POD.
=cut
sub method {
my $self = shift; # hier kommt deine Instanz, das links neben dem ->.
# TODO...
} # /method
Den Zugriff auf Klassenvariablen ohne Akzessor finde ich so hässlich wie das Wort Akzessor :)
Hier mein Vorschlag:
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
48
49
package Ca; # Großbuchstabe vorne dran!
use strict;
use warnings;
use base qw(Class::Accessor);
__PACKAGE__->mk_accessors(qw(instability));
#our $instability = 4; # wird im Konstruktor gesetzt.
=head1 METHODS
=head2 new( $dimension, $iniTime, $finTime, $rndInit, $useNorth, $useDiagonal )
TODO: Deine Beschreibung des Objetes, das man mit new() konstruiert, hier.
=cut
sub new {
my $class = shift;
my ( $dimension, $iniTime, $finTime, $rndInit, $useNorth, $useDiagonal ) = @_;
# TODO: Prüfen der Argumente
my @cellList = ();
my $some_data = {
dim => $dimension,
iniTime => $iniTime,
finTime => $finTime,
rndInit => $rndInit,
useNorth => $useNorth,
useDiagnoal => $useDiagonal,
cellList => \@cellList,
# alternativ: anonyme Arrayreferenz
#cellList => [],
};
my $self = bless ($some_data, $class);
# init instability:
$self->instability(4);
# get this value anywhere else by calling my $inst = $obj->instability();
$self->addCells();
$self->addCellsNeighbors();
return $self;
} # /new
1; # Semikolon dran!