내 프레임 생성자에는 쉽게 메뉴 모음을 만드는 기능이 있습니다.이 wxPerl 프로그램에서`print`가 작동하지 않는 이유는 무엇입니까?
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;
}
[...]
불행히도, 작동하지 않습니다. SetupMenu()
함수에 print
을 넣은 후에 인쇄되지 않았습니다. 다른 한편으로, 나는 그것을 warn
에 넣었을 때 경고했다.
더 나쁜 것은 new()
함수에서 print
을 넣더라도 여전히 인쇄되지 않는다는 것입니다. 무슨 일 이니?
그는 버퍼링으로 고통 받고 있습니다. IIRC STDERR은 기본적으로 autoflush로 설정되지만 STDOUT은 버퍼 출력으로 설정됩니다. – daotoad
@daotoad - 매우 그럴듯한 ... 내 다음 추측이었을 것입니다. OP에서 이것을 볼 수 있도록 대답으로 바꾸고 싶을 수도 있습니다. – DVK
autoflush 제안에 감사드립니다! 파일 상단에'$ | = 1'을 추가하면 필요할 때'print'가 실행됩니다. 그러나 바는 내 프로그램 일지 모르지만 여전히 표시되지 않습니다. –