NAME

Quiq::ApplicationPaths - Ermittele Pfade einer Unix-Applikation

SYNOPSIS

# Homedir: <prefix>/opt/<application> (<prefix> kann leer sein)

use FindBin qw/$Bin/;
use lib "$Bin/../lib/perl5";  # .. d.h. $depth == 1
use Quiq::ApplicationPaths;

my $app = Quiq::ApplicationPaths->new;

my $name = $app->name;        # <application>
my $prefix = $app->prefix;    # <prefix>

my $homeDir = $app->homeDir;  # <prefix>/opt/<application>
my $etcDir = $app->etcDir;    # <prefix>/etc/opt/<application>
my $varDir = $app->varDir;    # <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 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);

Arguments

$depth (Default: 1)

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

Description

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

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.221

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2024 Frank Seitz

LICENSE

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