diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-15 19:43:11 +0000 |
commit | fc22b3d6507c6745911b9dfcc68f1e665ae13dbc (patch) | |
tree | ce1e3bce06471410239a6f41282e328770aa404a /upstream/mageia-cauldron/man3pm/strict.3pm | |
parent | Initial commit. (diff) | |
download | manpages-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.3pm | 169 |
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. |