我想用Perl来读取该模块的Tcl版本
Tcl::pTk
与...有关。我发现以下哪个工作正常
use strict;
use warnings;
use Tcl::pTk;
my $int = new Tcl::pTk;
$int->Eval(<<'EOS');
# pure-tcl code to create widgets (e.g. generated by some GUI builder)
text .e
## http://wiki.tcl.tk/1626#tk_version
.e insert end "tcl_version $tcl_version\n"
.e insert end "tcl_patchLevel $tcl_patchLevel\n"
.e insert end "tk_version $tk_version\n"
.e insert end "tk_patchLevel $tk_patchLevel\n"
.e insert end "tk_library $tk_library\n"
pack .e
EOS
my $e = $int->widget('.e'); # get .e entry into play
$int->MainLoop;
这会显示GUI中的值,但我想在脚本的其他部分使用$tcl_version
。我失败了,因为$tcl_version
似乎不存在。我不需要GUI部分,只需要标量的值。
答案 0 :(得分:5)
应该尝试最简单的事情:
my tcl_version = $int->Eval('info tclversion');
或者等同于Tcl方面:
my tcl_version = $int->Eval('set tcl_version');
所有Tcl命令都会产生一个结果,因此应该反映在这里。此外,大多数情况下,您最好获得版本报告的补丁级别;语言版本仅适用于粗略功能,而不是系统状态报告等详细信息(例如,您需要错误报告的补丁编号)。
答案 1 :(得分:1)
此后,我在Tcl :: pTk,$int->tclVersion
和$int->tclPatchlevel
中发现了未公开的方法,分别相当于$int->Eval('info tclversion')
和$int->Eval('info patchlevel')
。
它们已经在Tcl :: pTk中内部使用。我不打算删除这些内容,但是也不知道长期保留它们或将它们设为“公开” /记录在文档中是一个好主意,因此最好采用现有答案的方法。 (Tcl :: pTk所基于的Tcl :: Tk没有这些方法。)