Thread OO-Modul schreiben (9 answers)
Opened by bianca at 2013-04-14 13:01

hlubenow
 2013-04-14 21:14
#167060 #167060
User since
2009-02-22
875 Artikel
BenutzerIn
[default_avatar]
2013-04-14T09:36:31 bianca
Habe hiermit jetzt mal begonnen und gleich Fragen :)

Hier die Scripte:

subsembly.pm
und test_subsembly.pl:

Öhm, ich hab das mal ein bißchen umgeschrieben, so daß es wenigstens lauffähig ist:
subsembly.pm:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
package subsembly;

use warnings;
use strict; 

sub new {
    my $classname = shift;
    my $self = {};
    return bless($self, $classname);
}

sub test {
    print "du mich auch\n";
}

1;

test_subsembly.pl:
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
#!/usr/bin/perl -w
use strict; 
use warnings;
use subsembly;

if (my $test = subsembly->new()) {
}
else { print "Fehler $!\n"; }

if (my $test = subsembly->test()) {
}
else { print "Fehler $!\n"; }

Mit OOP hat das aber nicht viel zu tun. Es ist auch nicht nötig, Klassen in externe Moduldateien auszulagern. Man kann auch Perl mit Klassen in einer einzigen Skriptdatei schreiben. Mein Beispiel dazu sieht immer so aus (nach einem Beispiel aus einem Python-Buch):
lamp.pl:
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
#!/usr/bin/perl

use warnings;
use strict;

package Lamp;

    sub new {
        my $classname = shift;
        my $self = {status => "off"};
        return bless($self, $classname);
    }

    sub switchOn {
        my $self = shift;
        print "Click. Light.\n";
        $self->{status} = "on"; 
    }

    sub switchOff {
        my $self = shift;
        print "Click. Darkness.\n";
        $self->{status} = "off";
    }

    sub printStatus {
        my $self = shift;
        print "The lamp is " . $self->{status} . " now.\n";
    }

package main;

my $lamp = Lamp -> new();
$lamp -> printStatus();
$lamp -> switchOn();
$lamp -> printStatus();
$lamp -> switchOff();
$lamp -> printStatus();
print $lamp->{status}."\n";

Im Grunde sind das die Fragen, die in dem (empfehlenswerten) Buch "Intermediate Perl", früher hieß das "Learning Perl Objects, References, and Modules" (O'Reilly), dargestellt sind.

View full thread OO-Modul schreiben