- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
为了强制执行干净和明确的代码,我通常
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}
它产生类似的东西
没有出现错误表明 \printscalar
的定义忽略了顶部 \perldo
参数中的 use strict;
。结果还表明,由于 my
,$scalar
的设置在那里不再为人所知。为了避免这样的错误,我希望收到一个错误
Global symbol "$scalar" requires explicit package name
每当我在引入新变量时忘记指定 my
或 our
时。
我的问题的解决方法是包含语句
use strict;
在所有 \perldo
, ... 命令中,这可以使用宏来完成。不过,我想知道是否没有可能避免此类重述。
最佳答案
perltex CTAN documentation在 3.2.3 部分给出了已加载模块和 pragma 的列表。这些包括 use strict;
。
文档不太清楚什么时候这是默认设置,但它似乎在 --nosafe
下。那么这个选项应该是切换它并加载这些默认值的方式。
您是否尝试仅在使用的第一个命令(如 \perldo
)中设置它?这可能就足够了。
--permit
选项允许 Opcode 中描述的“功能”要指定的模块,使用模块做什么 Safe .虽然我不知道如何直接使用它,但Safe::reval
方法下的讨论可能会有所帮助。
我这里没有安装模块,无法尝试。我希望这对您有所帮助。
不得已,何不联系作者?您可能已经发现了一个错误(在文档中),因为观察到的行为似乎与文档冲突。此外,这很可能是可行的添加。
关于perltex 全局使用严格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45552322/
为了强制执行干净和明确的代码,我通常 use strict; 在编写 Perl 程序时。我也想在 perltex 中保持这个习惯。 所以我应该把这个 use strict; 语句放在哪里,以便它管理所
我是一名优秀的程序员,十分优秀!