为了保持代码的简洁和明确,我通常会进行以下操作:
当编写Perl程序时,我希望在perltex中也保持这个习惯。
那么,我应该把
以下是一个perltex示例文件,可以正常运行而不会引发错误:
在所有的
use strict;
当编写Perl程序时,我希望在perltex中也保持这个习惯。
那么,我应该把
use strict;
语句放在哪里,以便它控制所有后续的\perldo
、\perlnewcommand
、\perlnewenvironment
、\perlrenewcommand
和\perlrenewenvironment
调用?以下是一个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}
它产生类似于
没有引发错误表明在\perldo
的顶部参数中使用的use strict;
在\printscalar
的定义中被忽略了。结果还显示由于my
,$scalar
的设置不再被知道了。为了避免这种错误,我希望在引入新变量时忘记指定my
或 our
时收到一个错误消息:
"$scalar"全局符号需要显式包名称
解决问题的方法是包含语句:
use strict;
在所有的
\perldo
命令中,...都需要重复表述,可以使用宏来完成。然而,我想知道是否有可能避免这样的重复表述。
env PERL5OPT=w perltex --nosafe perlhash.tex
无法解决问题;当给出上述文件作为perlhash.tex时,它可以正常运行而不会引发所需的错误。 - Bernhard Bodenstorferenv PERLOPT=-Mstrict perltex --nosafe perlhash.tex
运行时没有出现任何错误提示。 - Bernhard Bodenstorferenv PERL5OPT=-Mstrict perltex --nosafe perlhash.tex
引发了所需的错误(实际上也拒绝了 %HASH 的声明)。因此,这是我所述问题的一个可能解决方案。问题仍然存在,即是否可以在 perltex 源文件内部实现此功能,以便可以调整use strict
的适用性。 - Bernhard Bodenstorfer