KB wrote:
> "Michael Zedeler" <michael@zedeler.dk> wrote in message
> news:%H8bf.73415$Fe7.250428@news000.worldonline.dk...
>
>
>>Det er mere oplagt at gøre som du allerede gør.
>
>
> Jeg gør nu ikke så meget
> Jeg kan nemlig ikke få det til at virke, som jeg gerne vil.
>
> [root@adsl ~]# perl test.pl
> Can't use string ("test") as a HASH ref while "strict refs" in use at
> test.pm line 9.
>
>
> Jeg er slet ikke i tvivl om at jeg slet ikke har forstået package systemet
> og gør mange mærkelige ting.
>
> [root@adsl ~]# cat test.pl
> #!/usr/bin/perl -w
>
> use strict;
> use test;
>
> test->server ("example.com");
> test->new ();
Jeg tror dette her er mere oplagt:
my $object = test->new();
$object->server("minlokalemailserver");
Det passer i hvert fald på hvis du vil behandle server som en
instans-metode på klassen test.
> [root@adsl ~]# cat test.pm
> package test;
>
> use strict;
> use warnings;
>
> sub new
> {
> my $self = shift;
> my $server = $self->{server};
De to ovenstående linier er i stykker. Hvad er du ude på at der skal ske?
En slags "generisk" constructor, kan man lave ved at spørge hvad klasse,
variablen skal være sådan her:
my $class = shift;
my $self = <en reference til et eller andet, f. eks. en anonym hashtabel>
....
og endelig
return bless $self, $class;
(Forklæder din reference, så den bliver et rigtigt objekt af typen $class.)
Almindeligvis forklæder man en hashtabel som et objekt, så koden bliver
sådan her:
sub new {
my $class = shift;
my $self = {};
return bless $self, $class;
}
Den returnerer så en reference til en tom hashtabel, som er forklædt som
den klasse, man forventer. Hvis metoden f. eks. er i en pakke, der
hedder "test", kan jeg bare skrive
my $object = test->new();
Hvorefter metoden ovenfor bliver kørt og returnerer et objekt af klassen
"test" til mig.
Jeg tror det er en god idé at tage et kig på nogle manualer. Jeg fandt
en bunke, som er online, her:
http://www.perl.org/books/library.html
Generelt er objekter i perl lidt specielle, fordi den underliggende
struktur er meget synlig. Det kan godt virke forvirrende, hvis man er
vant til Java, hvor det hele sker automagisk.
Mvh. Michael.
--
Visit my home page at
http://michael.zedeler.dk/
Get my vcard at
http://michael.zedeler.dk/vcard.vcf