【问题标题】:Perl Tcl::pTk read Tcl versionPerl Tcl::pTk 读取 Tcl 版本
【发布时间】:2018-05-25 13:16:51
【问题描述】:

我想用 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 部分,只需要标量的值。

【问题讨论】:

  • Tcl::pTk 本身并没有真正“链接”或绑定到特定的 Tcl/Tk 版本,因为它是纯 Perl。它是 Tcl.pm 库(Tcl::pTk 使用的),可以编译为使用特定的 Tcl/Tk 版本。这里接受的答案是在运行时检查正在使用哪个版本的好方法。

标签: perl tcl tk


【解决方案1】:

应该尝试最简单的方法:

my tcl_version = $int->Eval('info tclversion');

在 Tcl 端的替代和等效:

my tcl_version = $int->Eval('set tcl_version');

所有的 Tcl 命令都会产生一个结果,所以应该在这里反映出来。此外,大多数情况下,您最好获取补丁级别的版本报告;语言版本只是针对粗略的功能,而不是像系统状态报告这样的详细信息(例如,您需要补丁号来报告错误)。

【讨论】:

  • 完美。谢谢。
  • 考虑接受答案,如果它解决了您的问题。
【解决方案2】:

我后来在 Tcl::pTk、$int-&gt;tclVersion$int-&gt;tclPatchlevel 中发现了未记录的方法,它们分别相当于 $int-&gt;Eval('info tclversion')$int-&gt;Eval('info patchlevel')

它们已经在 Tcl::pTk 内部使用。我不打算删除这些,但也不知道将它们长期保留或将它们“公开”/记录是否是一个好主意,因此最好坚持现有答案的方法。 (Tcl::Tk 是基于 Tcl::pTk 的,没有这些方法。)

【讨论】:

    猜你喜欢
    • 2017-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 2020-12-29
    相关资源
    最近更新 更多