Prty
view release on metacpan or search on metacpan
lib/Prty/ApplicationPaths.pm view on Meta::CPAN
prefix() : /home/<user>
name() : <application>
homeDir() : /home/<user>/opt/<application>
etcDir() : /home/<user>/etc/opt/<application>
varDir() : /home/<user>/var/opt/<application>
=head1 METHODS
=head2 Konstruktor
=head3 new() - Konstruktor
=head4 Synopsis
$app = $class->new;
$app = $class->new($depth);
=head4 Arguments
=over 4
=item $depth (Default: 1)
Gibt an, wie viele Subverzeichnisse tief das Programm unterhalb des
Applikations-Homedir (<prefix>/opt/<application>) angesiedelt ist.
=back
=head4 Description
Instantiiere ein Objekt der Klasse und liefere dieses zurück.
=cut
# -----------------------------------------------------------------------------
sub new {
my $class = shift;
my $depth = shift || 1;
# Wir arbeiten nicht mit den Variablen von FindBin, da diese
# Symlinks auflösen und wir keinen Symbolischen Namen wie
# 'prod' als Version erhalten, wenn dies ein Symlink auf eine
# reale Version ist.
my $path = $0;
if ($path !~ m|^/|) {
# Einen relativen Pfad ergänzen wir um das aktuelle Verzeichnis.
# Achtung: getcwd liefert möglicherweise nicht den Versionspfad
# den wir meinen, wenn wir unterhalb von version/<version> stehen.
# Denn getcwd liefert den realen Pfad und beinhaltet keine Symlinks.
# Wenn <version> ein Symlink ist, erscheint der reale Name im Pfad.
$path =~ s|^./||;
$path = sprintf '%s/%s',Cwd::getcwd,$path;
}
# HomeDir bestimmen, indem wir das Programm und $depth
# Verzeichnisse darüber vom Pfad entfernen
my @path = split m|/|,$path;
splice @path,-($depth+1);
my $homeDir = join '/',@path;
# <application> ist die letzte Pfadkomponente
my ($application,$etcPath,$varPath);
$application = pop @path;
# <prefix> erhalten wir nach dem Entfernen des
# Verzeichnisses oberhalb von <application>
pop @path; # opt entfernen
my $prefix = join('/',@path);
my $etcDir = "$prefix/etc/opt/$application";
my $varDir = "$prefix/var/opt/$application";
my $self = bless {
name=>$application,
prefix=>$prefix,
homeDir=>$homeDir,
etcDir=>$etcDir,
varDir=>$varDir,
},$class;
Hash::Util::lock_ref_keys($self);
return $self;
}
# -----------------------------------------------------------------------------
=head2 Objektmethoden
=head3 name() - Name der Applikation
=head4 Synopsis
$name = $app->name;
=head4 Description
Liefere den Namen <name> der Applikation.
=cut
# -----------------------------------------------------------------------------
sub name {
shift->{'name'};
}
# -----------------------------------------------------------------------------
=head3 prefix() - Pfad-Präfix der Installation
=head4 Synopsis
$prefix = $app->prefix;
$prefix = $app->prefix($subPath);
( run in 2.259 seconds using v1.01-cache-2.11-cpan-71847e10f99 )