Perl Tcl::pTk 读取 Tcl 版本
Perl Tcl::pTk read Tcl version
我想用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 部分,只需要标量的值。
应该尝试可能可行的最简单的方法:
my tcl_version = $int->Eval('info tclversion');
在 Tcl 端替代和等效:
my tcl_version = $int->Eval('set tcl_version');
所有 Tcl 命令都会产生一个结果,因此应该在此处反映出来。此外,大多数情况下,最好获取版本报告的补丁级别;语言版本仅用于粗略功能,而不是系统状态报告之类的详细信息(例如,您需要补丁号才能报告错误)。
我在 Tcl::pTk、$int->tclVersion
和 $int->tclPatchlevel
中发现了未记录的方法,它们分别等同于 $int->Eval('info tclversion')
和 $int->Eval('info patchlevel')
。
它们已在 Tcl::pTk 内部使用。我不打算删除这些,但也不知道将它们长期保留或使它们 "public"/记录下来是否是个好主意,因此最好坚持现有答案的方法。 (Tcl::pTk所基于的Tcl::Tk没有这些方法。)
我想用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 部分,只需要标量的值。
应该尝试可能可行的最简单的方法:
my tcl_version = $int->Eval('info tclversion');
在 Tcl 端替代和等效:
my tcl_version = $int->Eval('set tcl_version');
所有 Tcl 命令都会产生一个结果,因此应该在此处反映出来。此外,大多数情况下,最好获取版本报告的补丁级别;语言版本仅用于粗略功能,而不是系统状态报告之类的详细信息(例如,您需要补丁号才能报告错误)。
我在 Tcl::pTk、$int->tclVersion
和 $int->tclPatchlevel
中发现了未记录的方法,它们分别等同于 $int->Eval('info tclversion')
和 $int->Eval('info patchlevel')
。
它们已在 Tcl::pTk 内部使用。我不打算删除这些,但也不知道将它们长期保留或使它们 "public"/记录下来是否是个好主意,因此最好坚持现有答案的方法。 (Tcl::pTk所基于的Tcl::Tk没有这些方法。)