Frank Seitz
and 1 contributors

NAME

Prty::ApplicationPaths - Ermittele Pfade einer Unix-Applikation

SYNOPSIS

    # Homedir: <prefix>/opt/<application>
    
    use FindBin qw/$Bin/;
    use lib "$Bin/../lib/perl5";           # d.h. $depth == 1
    use Prty::ApplicationPaths;
    
    my $app = Prty::ApplicationPaths->new($depth);
    
    my $name = $app->name;                 # <application>
    my $prefix = $app->prefix($subPath);   # <prefix>
    
    my $homeDir = $app->homeDir($subPath); # <prefix>/opt/<application>
    my $etcDir = $app->etcDir($subPath);   # <prefix>/etc/opt/<application>
    my $varDir = $app->varDir($subPath);   # <prefix>/var/opt/<application>

DESCRIPTION

Die Klasse ermöglicht einer Perl-Applikation unter Unix ohne hartkodierte absolute Pfade auszukommen. Alle Pfade, unter denen sich die verschiedenen Teile der Applikation (opt-, etc-, var-Bereich) im Dateisystem befinden, werden von der Klasse aus dem Pfad des ausgeführten Programms und aus Installations-Konventionen hergeleitet.

Das Layout entspricht der opt-Installationsstruktur eines Unix-Systems:

  • /opt/<application> (Programmcode und statische Daten)

  • /etc/opt/<application> (Konfiguration)

  • /var/opt/<application> (Bewegungsdaten)

Die Pfade müssen nicht im Root-Verzeichnis beginnen, ihnen kann auch ein Präfix-Pfad <prefix> vorangestellt sein. Z.B. kann sich die Struktur im Home-Verzeichnis des Benutzers befinden (siehe Abschnitt "EXAMPLES").

EXAMPLES

/opt/<application>/...

    prefix()  : (Leerstring)
    name()    : <application>
    homeDir() : /opt/<application>
    etcDir()  : /etc/opt/<application>
    varDir()  : /var/opt/<application>

/home/<user>/opt/<application>/...

    prefix()  : /home/<user>
    name()    : <application>
    homeDir() : /home/<user>/opt/<application>
    etcDir()  : /home/<user>/etc/opt/<application>
    varDir()  : /home/<user>/var/opt/<application>

METHODS

Konstruktor

new() - Konstruktor

Synopsis

    $app = $class->new;
    $app = $class->new($depth);

Description

Instantiiere ein Objekt der Klasse und liefere dieses zurück.

Arguments

$depth (Default: 1)

Gibt an, wie viele Subverzeichnisse tief das Programm unterhalb des Applikations-Homedir (<prefix>/opt/<application>) angesiedelt ist.

Objektmethoden

name() - Name der Applikation

Synopsis

    $name = $app->name;

Description

Liefere den Namen <name> der Applikation.

prefix() - Pfad-Präfix der Installation

Synopsis

    $prefix = $app->prefix;
    $prefix = $app->prefix($subPath);

Description

Liefere den Pfad-Präfix <prefix> der Applikations-Installation, also den Pfad oberhalb des opt-Verzeichnisses. Ist die Applikation in /opt (opt im Wurzelverzeichnis) installiert, wird ein Leerstring geliefert. Ist Zeichenkette $subPath angegeben, wird diese mit '/' getrennt angefügt.

homeDir() - Home-Verzeichnis der Applikation

Synopsis

    $homeDir = $app->homeDir;
    $homeDir = $app->homeDir($subPath);

Description

Liefere das Verzeichnis, in dem der Programmcode und die statischen Daten der Applikation abgelegt sind. Ist Zeichenkette $subPath angegeben, wird diese mit '/' getrennt angefügt.

etcDir() - Konfigurations-Verzeichnis der Applikation

Synopsis

    $etcDir = $app->etcDir;
    $etcDir = $app->etcDir($subPath);

Description

Liefere das Verzeichnis, in dem die Konfigurationsdateien der Applikation abgelegt sind. Ist Zeichenkette $subPath angegeben, wird diese mit '/' getrennt angefügt.

varDir() - Bewegungsdaten-Verzeichnis der Applikation

Synopsis

    $varDir = $app->varDir;
    $varDir = $app->varDir($subPath);

Description

Liefere das Verzeichnis, in dem die Applikation Bewegungsdaten speichert. Ist Zeichenkette $subPath angegeben, wird diese mit '/' getrennt angefügt.

DETAILS

Mögliche Erweiterungen

Andere Layouts

Andere Layouts sind möglich und könnten von der Klasse ebenfalls behandelt werden. Bei Bedarf kann der Konstruktor um eine Option -layout=>$layout erweitert und das betreffende Layout innerhalb des Konstruktors behandelt werden. Beispiele:

Installation mit Unterscheidung nach Versionsnummer:

    <prefix>/opt/<application>/<version>
    <prefix>/etc/opt/<application>/<version>
    <prefix>/var/opt/<application>/<version>

Installation mit Unterscheidung nach Versionsnummer in eigenem Subverzeichnis:

    <prefix>/opt/<application>/version/<version>
    <prefix>/etc/opt/<application>/<version>
    <prefix>/var/opt/<application>/<version>

Kein opt-Unterverzeichnis in etc und var:

    <prefix>/opt/<application>
    <prefix>/etc/<application>
    <prefix>/var/<application>

Optionaler Trenner bei etcDir() und varDir()

Die Methoden etcDir() und varDir() könnten um eine Variante mit zwei Parametern erweitert werden, die die Vorgabe des Trennzeichens erlaubt:

    $path = $app->etcDir('','.conf');
    # <prefix>/etc/opt/<application>.conf
    
    $path = $app->varDir('','.log');
    # <prefix>/etc/opt/<application>.log

VERSION

1.108

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2017 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.