“错误”;1132148不是散列;在Linux中使用Tk运行Perl程序时

“错误”;1132148不是散列;在Linux中使用Tk运行Perl程序时,linux,perl,hash,x11,tk,Linux,Perl,Hash,X11,Tk,我正在运行Centos 7、Perl 5和X11。在运行从在线教程复制的第一次perl程序时- #!/usr/bin/perl use strict; use Tk; my $mw = new MainWindow; my $label = $mw -> Label(-text=>"Hello World") -> pack(); my $button = $mw -> Button(-text => "Quit", -command => sub

我正在运行Centos 7、Perl 5和X11。在运行从在线教程复制的第一次perl程序时-

#!/usr/bin/perl
use strict;
use Tk;
my $mw = new MainWindow;
my $label = $mw -> Label(-text=>"Hello World") -> pack();
my $button = $mw -> Button(-text => "Quit", 
    -command => sub { exit })
-> pack();
MainLoop;
然后从命令行调用-

./test.pl
我收到以下错误-

[foo@localhost Desktop]$ ./test.pl 
1132148 is not a hash at /usr/lib64/perl5/vendor_perl/Tk/MainWindow.pm  line 53.
Aborted (core dumped)
在注释掉行之后,错误似乎是由“my$mw=”行生成的

通过谷歌搜索错误消息,我找到了一些参考,表明这可能是X11已知的问题,但不确定。也不确定从哪里开始寻找答案


我(使用yum)进行了双重检查,以确保tk、perl-tk和tcl是最新的。我试图检查X安装的状态,但有点害怕重新安装,以免让事情变得更糟。

来自mbethke的评论导致了这个特定错误的真正问题。 事实上,在Linux上,您可以使用
wish
命令快速检查Tk是否正常工作(这将打开一个小窗口)

出现问题时,wish不会打开并输出以下内容

unknown color name 'BACKGROUND'
由于wish和这个错误比一些Perl&Tk脚本更常见,因此您可以找到更多的答案,例如,在其中您可以找到一种清除定义颜色的方法:

xrdb -load /dev/null
xrdb -query
xrdb-query
用于检查当前颜色配置。)


然后,一切都应该得到解决。

你能提供一个到本在线教程的链接吗?还有,您有什么版本的Tk Perl模块?并不是说它解决了您的问题,而是我可以确认您的代码在我的Perl安装中起作用,所以从语法的角度来看,您的代码是可以的。错误消息“不是散列”是来自Tk模块的非标准错误消息。如果你在谷歌上搜索,你会发现其他人也有同样的问题。该消息本身来自某个XS文件,我无法详细说明,因为我不懂该语言。虽然很明显,这可能是您的安装问题,而不是Perl的问题。教程站点是版本(每个yum)软件包perl-Tk-804.030-6.el7.x86_64已经安装,最新版本软件包1:Tk-8.5.13-4.el7.x86_64已经安装,最新版本不确定它是否仍然相关,但我刚才遇到了相同的问题。这似乎与X11颜色值未定义有关,可以通过运行
xrdb
来修复,例如使用中的一个文件执行
xrdb merge~/.Xresources
。但不知道根本的问题是什么。