perltex全球使用严格

时间:2017-08-07 17:15:28

标签: perl latex

为了强制执行清晰明确的代码,我习惯

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

没有出现错误,表明use strict;定义中忽略了\perldo参数中的\printscalar $scalar。结果还显示由于my而不再知道my的设置。为避免此类错误,我希望收到错误

  

全局符号“$ scalar”需要显式包名称

每当我在引入新变量时忘记指定ouruse strict; 时。

我的问题的解决方法是包含声明

\perldo

在所有select staff.fname, staff.role, patient.pfname, plname, appoitment.aotdate from staff, patient, appointment where patient.pid=appointment.patientId and staff.id=appointment.staffid ,...命令中,这可以使用宏来完成。不过我想知道是否有可能避免这种重新陈述。

1 个答案:

答案 0 :(得分:1)

perltex CTAN documentation 3.2.3 部分中提供了已加载模块和编译指示的列表。这些包括 use strict;

当这是默认设置时,文档有点不清楚,但它似乎在--nosafe下。然后,此选项应该是切换它并获取这些默认值的方法。

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

--permit选项允许指定Opcode模块中描述的“功能”,使用模块Safe完成的操作。虽然我没有看到如何直接使用此功能,但Safe::reval方法下的讨论可能会有所帮助。

我这里没有安装模块,也无法尝试。我希望这有一些用处。

作为最后的手段,为什么不联系作者?您可能已经发现了一个错误(在文档中),因为观察到的行为似乎与文档冲突。此外,这可能是可行的。