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