perltex to globally use strict

Viewed 117

To enforce clean and explicit code, I customarily

use strict;

when programming Perl. I would like to keep this habit in perltex, too.

So where should I put this use strict; statement so that it governs all successive \perldo, \perlnewcommand, \perlnewenvironment, \perlrenewcommand and \perlrenewenvironment invocations in the perltex input file?

The following perltex example file runs without raising an error:

\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}

It produces something similar to

typeset output text

That no error is raised shows that use strict; in the top \perldo argument is disregarded in the definition of \printscalar. The result also shows that the setting of $scalar was not known there any more because of the my. To avoid such mistakes, I would wish to receive an error

Global symbol "$scalar" requires explicit package name

whenever I forget to specify my or our when introducing a new variable.

A workaround to my problem is to include the statement

use strict;

in all \perldo, ... commands, and this can be done using macros. Nevertheless I wonder whether there is no possibility to avoid such re-statements.

1 Answers
Related