Was Struppi vielleicht übersieht, ich sage deswegen nur »vielleicht«, weil Du im Gegensatz zu mir Programmiererfahrung zu haben scheinst (siehe Deine Auflistung) und somit eigentlich die besseren Voraussetzungen mitbringen müsstest, Dich in eine x-beliebige, andere Programmiersprache einzuarbeiten, was ich sagen will ist, es deckt sich in der Tat mit Deinen Aussagen, dass ein so wichtiger Part wie dieses in Perl nur so oberflächig behandelt wird.
Naja, mir würde es in dem Punkt auch nicht anders gehen, ich hätte in dem Falle (also das mir etwas merkwürdig vorkommt) in Perldoc nachgeschaut und dort wird es zumindest genauso gesagt wie wir es hier mehrmals erklärt haben, was es dann genau mit lexikalischen Variabeln auf sich hat liesse sich auch erlesen.
Jede Sprache hat halt ihr Konzept, wie z.b. das erwähnte Javascript, daß sich in dem Punkt von Perl unterschiedet, da es den Scope anders definiert
function test() {
var x = 0;
if(1) {
var x = 2;
}
alert(x)
}
test()
gibt 2
sub test {
my $x = 0;
if(1) {
my $x = 2;
}
print $x;
}
test()
gibt 0
und im Prinzip tritt das Verständnisproblem ja nur auf durch die Verwendung von my (was zu empfehlen ist), welches eine Variabel nicht an ein package bindet, sondern an einen Scope und aus irgendeinem Grund, will es Connie nicht wahr haben oder nicht verstehen, ich weiß es nicht.
Für mich hat diese frage bisher noch nie eine Rolle gespielt, schwieriger fand ich den umgekehrten Weg, aus einem package heraus Variabeln oder Funktionen bekannt zu machen
In meinen Auge ist daher das Ursprungsbeispiel hypothetisch. Ein package sollte, um Modular zu programmieren, in separaten Dateien verwendet werden und dort sollten natürlich auch keine Variabelndeklarationen im Namensraum von main erfolgen, daher tritt dieses Problem nie auf. Das ja nur eine Folge davon ist, dass eine Variabel im Namensraum main, mit my lexikalisch wurde und daher in allen packages in der Datei die Gleiche ist. Sowas macht keiner, der ein Perlprogramm schreibt.
Struppi.