summaryrefslogtreecommitdiffstats
path: root/upstream/mageia-cauldron/man3pm/strict.3pm
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-15 19:43:11 +0000
commitfc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch)
treece1e3bce06471410239a6f41282e328770aa404a /upstream/mageia-cauldron/man3pm/strict.3pm
parentInitial commit. (diff)
downloadmanpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.tar.xz
manpages-l10n-fc22b3d6507c6745911b9dfcc68f1e665ae13dbc.zip
Adding upstream version 4.22.0.upstream/4.22.0
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'upstream/mageia-cauldron/man3pm/strict.3pm')
-rw-r--r--upstream/mageia-cauldron/man3pm/strict.3pm169
1 files changed, 169 insertions, 0 deletions
diff --git a/upstream/mageia-cauldron/man3pm/strict.3pm b/upstream/mageia-cauldron/man3pm/strict.3pm
new file mode 100644
index 00000000..42906b0e
--- /dev/null
+++ b/upstream/mageia-cauldron/man3pm/strict.3pm
@@ -0,0 +1,169 @@
+.\" -*- mode: troff; coding: utf-8 -*-
+.\" Automatically generated by Pod::Man 5.01 (Pod::Simple 3.43)
+.\"
+.\" Standard preamble:
+.\" ========================================================================
+.de Sp \" Vertical space (when we can't use .PP)
+.if t .sp .5v
+.if n .sp
+..
+.de Vb \" Begin verbatim text
+.ft CW
+.nf
+.ne \\$1
+..
+.de Ve \" End verbatim text
+.ft R
+.fi
+..
+.\" \*(C` and \*(C' are quotes in nroff, nothing in troff, for use with C<>.
+.ie n \{\
+. ds C` ""
+. ds C' ""
+'br\}
+.el\{\
+. ds C`
+. ds C'
+'br\}
+.\"
+.\" Escape single quotes in literal strings from groff's Unicode transform.
+.ie \n(.g .ds Aq \(aq
+.el .ds Aq '
+.\"
+.\" If the F register is >0, we'll generate index entries on stderr for
+.\" titles (.TH), headers (.SH), subsections (.SS), items (.Ip), and index
+.\" entries marked with X<> in POD. Of course, you'll have to process the
+.\" output yourself in some meaningful fashion.
+.\"
+.\" Avoid warning from groff about undefined register 'F'.
+.de IX
+..
+.nr rF 0
+.if \n(.g .if rF .nr rF 1
+.if (\n(rF:(\n(.g==0)) \{\
+. if \nF \{\
+. de IX
+. tm Index:\\$1\t\\n%\t"\\$2"
+..
+. if !\nF==2 \{\
+. nr % 0
+. nr F 2
+. \}
+. \}
+.\}
+.rr rF
+.\" ========================================================================
+.\"
+.IX Title "strict 3pm"
+.TH strict 3pm 2023-11-28 "perl v5.38.2" "Perl Programmers Reference Guide"
+.\" For nroff, turn off justification. Always turn off hyphenation; it makes
+.\" way too many mistakes in technical documents.
+.if n .ad l
+.nh
+.SH NAME
+strict \- Perl pragma to restrict unsafe constructs
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 1
+\& use strict;
+\&
+\& use strict "vars";
+\& use strict "refs";
+\& use strict "subs";
+\&
+\& use strict;
+\& no strict "vars";
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+The \f(CW\*(C`strict\*(C'\fR pragma disables certain Perl expressions that could behave
+unexpectedly or are difficult to debug, turning them into errors. The
+effect of this pragma is limited to the current file or scope block.
+.PP
+If no import list is supplied, all possible restrictions are assumed.
+(This is the safest mode to operate in, but is sometimes too strict for
+casual programming.) Currently, there are three possible things to be
+strict about: "subs", "vars", and "refs".
+.ie n .IP """strict refs""" 6
+.el .IP "\f(CWstrict refs\fR" 6
+.IX Item "strict refs"
+This generates a runtime error if you
+use symbolic references (see perlref).
+.Sp
+.Vb 7
+\& use strict \*(Aqrefs\*(Aq;
+\& $ref = \e$foo;
+\& print $$ref; # ok
+\& $ref = "foo";
+\& print $$ref; # runtime error; normally ok
+\& $file = "STDOUT";
+\& print $file "Hi!"; # error; note: no comma after $file
+.Ve
+.Sp
+There is one exception to this rule:
+.Sp
+.Vb 2
+\& $bar = \e&{\*(Aqfoo\*(Aq};
+\& &$bar;
+.Ve
+.Sp
+is allowed so that \f(CW\*(C`goto &$AUTOLOAD\*(C'\fR would not break under stricture.
+.ie n .IP """strict vars""" 6
+.el .IP "\f(CWstrict vars\fR" 6
+.IX Item "strict vars"
+This generates a compile-time error if you access a variable that was
+neither explicitly declared (using any of \f(CW\*(C`my\*(C'\fR, \f(CW\*(C`our\*(C'\fR, \f(CW\*(C`state\*(C'\fR, or \f(CW\*(C`use
+vars\*(C'\fR) nor fully qualified. (Because this is to avoid variable suicide
+problems and subtle dynamic scoping issues, a merely \f(CW\*(C`local\*(C'\fR variable isn't
+good enough.) See "my" in perlfunc, "our" in perlfunc, "state" in perlfunc,
+"local" in perlfunc, and vars.
+.Sp
+.Vb 4
+\& use strict \*(Aqvars\*(Aq;
+\& $X::foo = 1; # ok, fully qualified
+\& my $foo = 10; # ok, my() var
+\& local $baz = 9; # blows up, $baz not declared before
+\&
+\& package Cinna;
+\& our $bar; # Declares $bar in current package
+\& $bar = \*(AqHgS\*(Aq; # ok, global declared via pragma
+.Ve
+.Sp
+The \fBlocal()\fR generated a compile-time error because you just touched a global
+name without fully qualifying it.
+.Sp
+Because of their special use by \fBsort()\fR, the variables \f(CW$a\fR and \f(CW$b\fR are
+exempted from this check.
+.ie n .IP """strict subs""" 6
+.el .IP "\f(CWstrict subs\fR" 6
+.IX Item "strict subs"
+This disables the poetry optimization, generating a compile-time error if
+you try to use a bareword identifier that's not a subroutine, unless it
+is a simple identifier (no colons) and that it appears in curly braces,
+on the left hand side of the \f(CW\*(C`=>\*(C'\fR symbol, or has the unary minus
+operator applied to it.
+.Sp
+.Vb 4
+\& use strict \*(Aqsubs\*(Aq;
+\& $SIG{PIPE} = Plumber; # blows up
+\& $SIG{PIPE} = "Plumber"; # fine: quoted string is always ok
+\& $SIG{PIPE} = \e&Plumber; # preferred form
+.Ve
+.PP
+See "Pragmatic Modules" in perlmodlib.
+.SH HISTORY
+.IX Header "HISTORY"
+\&\f(CW\*(C`strict \*(Aqsubs\*(Aq\*(C'\fR, with Perl 5.6.1, erroneously permitted to use an unquoted
+compound identifier (e.g. \f(CW\*(C`Foo::Bar\*(C'\fR) as a hash key (before \f(CW\*(C`=>\*(C'\fR or
+inside curlies), but without forcing it always to a literal string.
+.PP
+Starting with Perl 5.8.1 strict is strict about its restrictions:
+if unknown restrictions are used, the strict pragma will abort with
+.PP
+.Vb 1
+\& Unknown \*(Aqstrict\*(Aq tag(s) \*(Aq...\*(Aq
+.Ve
+.PP
+As of version 1.04 (Perl 5.10), strict verifies that it is used as
+"strict" to avoid the dreaded Strict trap on case insensitive file
+systems.