CPAN: Auslagern von Variablen

Beitrag lesen

Dir schwebt vor:

package allgemein;  
use Sys::Hostname qw(hostname);  
our ($host) = split(/\./,hostname);  
1;  

anderenorts:

use allgemein;  
print $allgemein::host;

Das funktioniert, ist allerdings kein guter Stil, da es fremden Code erlaubt, die Variable zu überschreiben. Das ist keine gute Idee wegen potenziellem AaaD.

Solche Variablen sollen entweder bei der Initialisierung schreibgeschützt werden (aber das versteckt nur die Symptome), oder besser deren Werte in einer Subroutine (oder wenn du später auf OOP umsteigst, in einem Klassenattribut) gekapselt sein.

package allgemein;  
use Sub::Exporter -setup => { exports => [ qw(host) ] };  
use Sys::Hostname qw(hostname);  
sub host {  
    return (split(/\./,hostname))[0];  
}  
1;

anderenorts:

use allgemein qw(host);  
print host;