#!/usr/bin/perl -Tw # Copyleft Ion. # Idea varastettu tuolta, http://koti.welho.com/rnissine/inheritance.rb # Originaalit sanoitukset http://students.llaky.fi/~t314/moog/mieto.html use strict; ### package Elucka; sub new($) { my $class = ref($_[0]) || $_[0]; bless { nimi => lc $class, isonimi => ucfirst lc $class }, $class; } sub kuinkasanoo($$) { my ($self, $teksti) = @_; my $sano = $self->sano; print "\n", "$self->{isonimi} sanoo $sano $sano\n" x 2, "Kuinka $self->{nimi} sanoo? Kuinka $self->{nimi} sanoo?\n", "Kuinka $self->{nimi} sanoo $teksti?\n", "$self->{isonimi} sanoo $sano $sano\n"; } ### package Kana; @Kana::ISA = qw(Elucka); sub sano($) { "kot kot kot" } ### package Karhu; @Karhu::ISA = qw(Elucka); sub sano($) { "mur mur mur" } ### package Gorilla; @Gorilla::ISA = qw(Elucka); sub kuinkasanoo($$) { my ($self, $teksti) = @_; print "\n$self->{isonimi} sanoo ärrhg ghräghgrr\n", "$self->{isonimi} sanoo ärrhg ghräghgrr bundolo\n", "Kuinka $self->{nimi} sanoo? Kuinka $self->{nimi} sanoo?\n", "Kuinka $self->{nimi} sanoo $teksti?\n", "$self->{isonimi} sanoo ärrhg ghräghgrr\n"; } ### package Kirahvi; @Kirahvi::ISA = qw(Elucka); sub sano($) { "öri öri öri" } ### package Kiiski; @Kiiski::ISA = qw(Elucka); sub sano($) { "..." } ### package Siittio; @Siittio::ISA = qw(Elucka); sub new($) { bless { nimi => "siittiö", isonimi => "Siittiö" }, ref($_[0]) || $_[0]; } sub sano($) { "ptlqm" } sub kuinkasanoo($$) { my ($self, $teksti) = @_; $self->SUPER::kuinkasanoo($teksti); print "ptlqm ptlqm ptlqm ptlqm\n\n"; } ### package main; print "\nONOMATOPOEETTINEN ALKOHOLILIIKE\n\n"; Kana->new->kuinkasanoo("Cabana"); Karhu->new->kuinkasanoo("Karhu"); Gorilla->new->kuinkasanoo("Carillo"); print "\nKetulla on krapula, niin myös madolla;\n", "Kaikki ne voit tavata Alkon jonossa!\n"; Kirahvi->new->kuinkasanoo("Kahvi - likööri"); print "\nSiili käyttää aineita, niin myös etana,\n", "Heitä et voi tavata Alkon jonossa!\n"; Kiiski->new->kuinkasanoo("Whisky"); Siittio->new->kuinkasanoo("I love you");