illu
23-06-2005, 19:30
Hi,
als erstes gleich mal der (auf's Wesentliche reduzierte) Code:
package UI;
use Curses;
sub new { bless {}, shift }
sub AUTOLOAD {
my ($self, @args) = @_;
use vars qw($AUTOLOAD);
print "$AUTOLOAD(@args)\n"; # gibt beim Testen "UI::DESTROY()" aus, und nicht, wie erwartet, "UI::initscr()"?
$AUTOLOAD =~ s/.*:://;
eval "$AUTOLOAD(@args)"; # oder "Curses::$AUTOLOAD"; ? Hat beim Testen keinen Unterschied gemacht
}
package main;
my $ui = UI->new();
$ui->initscr();
# usw.
Ich wuerde also gerne in der UI-Klasse nicht definierte Methodenaufrufe direkt an Curses.pm "weiterleiten".
Bei dem Programm, was ich gerade schreibe, moechte ich also einfach alles UI-maessige ueber meine UI-Klasse machen, also auch die Interaktion mit Curses.
(Zwischenfrage: ist das ueberhaupt eine gute Idee so, in Hinblick auf gutes Programmdesign, oder sollte ich es ganz anders angehen?)
Wieso funktioniert es aber nicht so wie oben?
Beim Testen (mit "use warnings") die()t es mit der folgenden Ausgabe:
Curses function 'initscr' called with too many arguments at ./test.pl line n.
als erstes gleich mal der (auf's Wesentliche reduzierte) Code:
package UI;
use Curses;
sub new { bless {}, shift }
sub AUTOLOAD {
my ($self, @args) = @_;
use vars qw($AUTOLOAD);
print "$AUTOLOAD(@args)\n"; # gibt beim Testen "UI::DESTROY()" aus, und nicht, wie erwartet, "UI::initscr()"?
$AUTOLOAD =~ s/.*:://;
eval "$AUTOLOAD(@args)"; # oder "Curses::$AUTOLOAD"; ? Hat beim Testen keinen Unterschied gemacht
}
package main;
my $ui = UI->new();
$ui->initscr();
# usw.
Ich wuerde also gerne in der UI-Klasse nicht definierte Methodenaufrufe direkt an Curses.pm "weiterleiten".
Bei dem Programm, was ich gerade schreibe, moechte ich also einfach alles UI-maessige ueber meine UI-Klasse machen, also auch die Interaktion mit Curses.
(Zwischenfrage: ist das ueberhaupt eine gute Idee so, in Hinblick auf gutes Programmdesign, oder sollte ich es ganz anders angehen?)
Wieso funktioniert es aber nicht so wie oben?
Beim Testen (mit "use warnings") die()t es mit der folgenden Ausgabe:
Curses function 'initscr' called with too many arguments at ./test.pl line n.