gpt4 book ai didi

perltex 全局使用严格

转载 作者:行者123 更新时间:2023-12-02 03:01:39 25 4
gpt4 key购买 nike

为了强制执行干净和明确的代码,我通常

use strict;

在编写 Perl 程序时。我也想在 perltex 中保持这个习惯。

所以我应该把这个 use strict; 语句放在哪里,以便它管理所有连续的 \perldo, \perlnewcommand, \perlnewenvironment\perlrenewcommand\perlrenewenvironment 在 perltex 输入文件中调用?

以下 perltex 示例文件运行时不会引发错误:

\documentclass[12pt]{article}

\usepackage{perltex}

\perldo{
my $scalar = "ok";
our @array = qw( array is fine );
%HASH = (
subject => "hash",
result => "perfect"
);
use strict;
}

\perlnewcommand\printscalar{
return $scalar;
}

\perlnewcommand\printarray{
return join ", ", @array;
}

\perlnewcommand\printhash{
return join ", ", map { sprintf "%s = %s", $_, $HASH{$_} } keys %HASH;
}

\begin{document}
Scalar: \printscalar

Array: \printarray

Hash: \printhash
\end{document}

它产生类似的东西

typeset output text

没有出现错误表明 \printscalar 的定义忽略了顶部 \perldo 参数中的 use strict;。结果还表明,由于 my$scalar 的设置在那里不再为人所知。为了避免这样的错误,我希望收到一个错误

Global symbol "$scalar" requires explicit package name

每当我在引入新变量时忘记指定 myour 时。

我的问题的解决方法是包含语句

use strict;

在所有 \perldo, ... 命令中,这可以使用宏来完成。不过,我想知道是否没有可能避免此类重述。

最佳答案

perltex CTAN documentation3.2.3 部分给出了已加载模块和 pragma 的列表。这些包括 use strict;

文档不太清楚什么时候这是默认设置,但它似乎在 --nosafe 下。那么这个选项应该是切换它并加载这些默认值的方式。

您是否尝试仅在使用的第一个命令(如 \perldo)中设置它?这可能就足够了。

--permit 选项允许 Opcode 中描述的“功能”要指定的模块,使用模块做什么 Safe .虽然我不知道如何直接使用它,但Safe::reval 方法下的讨论可能会有所帮助。

我这里没有安装模块,无法尝试。我希望这对您有所帮助。

不得已,何不联系作者?您可能已经发现了一个错误(在文档中),因为观察到的行为似乎与文档冲突。此外,这很可能是可行的添加。

关于perltex 全局使用严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com