Alohá!
Sieht gut aus hier, grade registriert weil ich einfach keine Idee habe wie folgendes zu Stande kommt:
# Get fh
sub get_fh {
print "\nARRAY IS: ", join (' ', @_);
my $class = shift;
print "\nARRAY IS: ", join (' ', @_);
my $file = shift or croak "specify file!\n";
print "\nARRAY IS: ", join (' ', @_);
my $option = shift or my $option = "dummy";
$file = abs_path($file) unless ( $file eq "tmpfile" );
print "\n FILE IS: ", $file;
print "\n OPTION IS: ", $option;
Wenn ich die Methode mit z.B. mit
$class->get_fh("/path/to/file", "write");
aufrufe, bleibt $option uninitialized!
Die Ausgabe gibt mir durchaus die korrekte Befüllung von @_ an, und die ersten beiden Parameter werden sauber runtergeshifted, doch wenn es an den letzten geht (bzw. die or-Bedingung evaluiert wird), klappts nicht.
Wenn ich die Überprüfung rausnehme und stumpf shifte ist alles wunderbar (bis auf die Tatsache daß ich keinen default-init auf $option machen kann).
Selbst wenn ich alternative checks auf Vorhandensein des dritten array-felds nutze wirft das alles über den Haufen:
defined(\$_[0]) ? my $option = shift : my $option = "dummy";
sorgt für die gleiche Problematik: es wird weder mit "dummy" initialisiert noch der vorhandene Parameter geshifted und $option zugewiesen.
Bin auch mit perl -d durchgesteppt:
- das Übergabearray ist korrekt befüllt
- bei einfachem shift wird korrekt zugewiesen
- bei Überprüfung auf Existenz oder Rückgabwert von shift bleibt $option uninitialisiert
Das Problem muß tatsächlich mit der Überprüfung der Befüllung von $option zu tun zu haben; wenn ich folgendes mache
my $option = shift;
my $option = "dummy" unless $option;
und mit perl -d durchsteppe, wird $option korrekt initialisiert doch durch die nächste Zeile wieder auf undef gesetzt.
DB<14> x $option
0 undef
DB<15> s
Fileclerk::get_fh(<laanger/path/to/File.pm>:65):
65: my $option = "dummy" unless ($option);
DB<15> x $option
0 'write'
DB<16> s
Fileclerk::get_fh(<laanger/path/to/File.pm>:66):
66: $file = abs_path($file) unless ( $file eq "tmpfile" );
DB<16> x $option
0 undef
DB<17>
Hab ich da was komplett falsch verstanden was die Überprüfung der initialisierung von Variablen angeht?
Wer kann das Rätsel lösen? :-)
TIA
DoN
drum&bass is a state of mind