Perl vs SAP im Firmenalltag

Steffen Ullrich <steffen@genua.de>
GeNUA mbH
http://www.genua.de

Wer sind wir (GeNUA)

Was ist TNT

Was ist TNT - II

wie sieht es aus

wie geht es weiter im Vortrag....

weiterer Inhalt

Am Anfang war das Chaos

Migration zu use strict

sanfte Migration

Module mystrict

Resultate der Migration

die Message wird erhört

Module mywarnings

mywarnings

package mywarnings;
use strict;
require warnings;
our @ISA = ( 'warnings' );

sub import {
    return if ( $GGLib::showwarn eq 'ignore' ); # ignorieren
    if ( $GGLib::showwarn eq 'fatal' ) { # FATAL dazusetzen
        if ( @_ == 1 ) {
            splice(@_,1,0,'FATAL','all' );
        } else {
            splice(@_,1,0,'FATAL' );
        }
    } # else passthru
    goto &warnings::import;
};
1;

Bugs

Bughunting

A Bugs Live

geordneter Rückzug

Fehlerfenster

Sanitäter!!!

Zugriffskontrolle

Zugriffskontrolle - Aufgaben

Zugriffskontrolle - Lösungen

Migration zu Proxy

Resourcenverbrauch

Die Zähmung des Monsters

Ansätze zum Nachladen

Module Demand - Aufgaben

Module Demand - Implementation

Module Demand - Code 1/3

package Demand;
use vars qw( $AUTOLOAD $__NO_STRICT );
# Code vereinfacht fuer Fall, das jedes Module in eigenem File

# use Demand 'Klasse'
# deklariere Klasse und setze @ISA von Klasse auf Demand Module
sub import {
    shift;
    foreach my $pkg (@_) {
      @{ "${pkg}::ISA" } = qw( Demand );
    }
}

Module Demand - Code 2/3

# Funktion aus dem Modul wird aufgerufen:
# lade das richtige Modul und rufe dort die Methode auf
sub AUTOLOAD {
    my ($pkg,$f) = $AUTOLOAD =~m|(.*)::(.*)|;
    __loadModule__( $pkg ) || return;
    my $goto = UNIVERSAL::can($pkg,$f )
        || UNIVERSAL::can($pkg,'AUTOLOAD' )
        || die;
    goto &$goto
}

Module Demand - Code 3/3

# lade das Modul und mache es unabhaengig von Demand
sub __loadModule__ {
    my $pkg = shift;
    @{ "${pkg}::ISA" } = (); # Demand rausnehmen
    eval "require $pkg";     # richtiges Modul laden
    die $@ if($@);
}

Module Demand - Resultate

Performance

slow moving target

TK::*Entry Probleme

Ersatz für Tk::*Entry

all you can eat - Überschrift

all you can eat

Memory leaks

Finden von Memory leaks

MemCookie - Implementation

package MemCookie;
my ($total,$activ);
sub new {
    my ($class,$id);
    $total++; $activ++;
    my $text = $id || "cookie#$total";
    debug( "create cookie $text $activ|$total" );
    return bless \$text,$class;
}
sub DESTROY {
    my $self = shift;
    $activ--;
    debug( "destroy cookie $$self $activ|$total" );
}

MemCookie - Resultat

Entwicklungsprozess

Entwicklungsstrategien

Entwicklungstools

abschließende Worte

menschlich

und schließlich

Leinen los

The End