В моем конструкторе кадров у меня есть функция, которая легко создает для меня панель меню.Почему `print` не работает в этой программе wxPerl?
package Routines;
#This function will set up a menu
#REQUIRED: entries
#RETURNS: id, menu
sub SetupMenu {
$menuItemCount = 0; #Element number under the same menu
$subMenuCount = 0; #Number of menus
$mbar = Wx::MenuBar->new(); #Menu bar constructor
for ($totalCount = 0; $totalCount < scalar($_[1]); $totalCount++) { #Loop for each entry
if ($menuItemCount == 0) { #If this is the first entry in the menu
$menuList[$subMenuCount] = Wx::Menu->new($_[$totalCount]); #Construct a menu and make this the title
} elsif ($_[$totalCount] == "---") { #If the entry is ---
#Treat it as a separator, skip ID
} elsif ($_[$totalCount] == "***") { #If the entry is ***
$mbar->Append($menuList[$subMenuCount]); #Add the menu to the bar
$menuItemCount = 0; #Reset the number of elements
$subMenuCount++; #Increment the number of menus
} else { #On normal operation
$menuList[$subMenuCount]->Append($id[$totalCount], $_[$totalCount]); #Add the element to the menu and assign it an ID
}
}
#print $mbar;
return (@id, $mbar);
}
#This package puts crap in the main window
package mehFrame;
use base qw(Wx::Frame);
sub new {
#Preparation
$class = shift;
$self = $class->SUPER::new(@_);
#Place the panel
$pan = Wx::Panel->new($self, -1);
#Set up menus
(@mehId, $mehBar) = Routines::SetupMenu("File", "Open ROM", "Save ROM", "Save ROM As", "---", "Close ROM", "Exit");
#Return
return $self;
}
[...]
К сожалению, это не работает. После ввода print
в функцию SetupMenu()
она не печаталась. С другой стороны, когда я положил его warn
, он предупредил.
Хуже то, что даже если я положил print
в функцию new()
, он все равно не печатает. Что происходит?
Может быть, он страдает от буферизации. По умолчанию IIRC STDERR установлен на автозапуск, но STDOUT установлен на выход буфера. – daotoad
@daotoad - очень правдоподобно ... это было бы моей следующей догадкой ... вы могли бы захотеть превратить это в ответ, чтобы OP это увидел. – DVK
Спасибо за предложение autoflush! Добавление '$ | = 1' в верхней части файла делало' print' при необходимости. Тем не менее, панель по-прежнему не отображается, хотя это может быть моя программа. –