summaryrefslogtreecommitdiffstats
path: root/upstream/debian-unstable/man3/Scalar::Util.3perl
diff options
context:
space:
mode:
Diffstat (limited to 'upstream/debian-unstable/man3/Scalar::Util.3perl')
-rw-r--r--upstream/debian-unstable/man3/Scalar::Util.3perl430
1 files changed, 430 insertions, 0 deletions
diff --git a/upstream/debian-unstable/man3/Scalar::Util.3perl b/upstream/debian-unstable/man3/Scalar::Util.3perl
new file mode 100644
index 00000000..7253d88d
--- /dev/null
+++ b/upstream/debian-unstable/man3/Scalar::Util.3perl
@@ -0,0 +1,430 @@
+.\" -*- 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 "Scalar::Util 3perl"
+.TH Scalar::Util 3perl 2024-01-12 "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
+Scalar::Util \- A selection of general\-utility scalar subroutines
+.SH SYNOPSIS
+.IX Header "SYNOPSIS"
+.Vb 4
+\& use Scalar::Util qw(blessed dualvar isdual readonly refaddr reftype
+\& tainted weaken isweak isvstring looks_like_number
+\& set_prototype);
+\& # and other useful utils appearing below
+.Ve
+.SH DESCRIPTION
+.IX Header "DESCRIPTION"
+\&\f(CW\*(C`Scalar::Util\*(C'\fR contains a selection of subroutines that people have expressed
+would be nice to have in the perl core, but the usage would not really be high
+enough to warrant the use of a keyword, and the size would be so small that
+being individual extensions would be wasteful.
+.PP
+By default \f(CW\*(C`Scalar::Util\*(C'\fR does not export any subroutines.
+.ie n .SS "Core Perl ""builtin"" Functions"
+.el .SS "Core Perl \f(CWbuiltin\fP Functions"
+.IX Subsection "Core Perl builtin Functions"
+Many functions in this module have served as the inspiration for a new
+experimental facility in recent versions of Perl. From various development
+versions, starting at 5.35.7, equivalent functions to many of these utilities
+are available in the \f(CW\*(C`builtin::\*(C'\fR package.
+.PP
+.Vb 1
+\& use Scalar::Util qw(blessed);
+\&
+\& $class = blessed $obj;
+\&
+\& $class = builtin::blessed $obj; # equivalent
+.Ve
+.PP
+For more information, see the documentation on builtin.
+.SH "FUNCTIONS FOR REFERENCES"
+.IX Header "FUNCTIONS FOR REFERENCES"
+The following functions all perform some useful activity on reference values.
+.SS blessed
+.IX Subsection "blessed"
+.Vb 1
+\& my $pkg = blessed( $ref );
+.Ve
+.PP
+If \f(CW$ref\fR is a blessed reference, the name of the package that it is blessed
+into is returned. Otherwise \f(CW\*(C`undef\*(C'\fR is returned.
+.PP
+.Vb 2
+\& $scalar = "foo";
+\& $class = blessed $scalar; # undef
+\&
+\& $ref = [];
+\& $class = blessed $ref; # undef
+\&
+\& $obj = bless [], "Foo";
+\& $class = blessed $obj; # "Foo"
+.Ve
+.PP
+Take care when using this function simply as a truth test (such as in
+\&\f(CW\*(C`if(blessed $ref)...\*(C'\fR) because the package name \f(CW"0"\fR is defined yet false.
+.PP
+\&\fISince Perl version 5.35.7\fR an equivalent function is available as
+\&\f(CW\*(C`builtin::blessed\*(C'\fR.
+.SS refaddr
+.IX Subsection "refaddr"
+.Vb 1
+\& my $addr = refaddr( $ref );
+.Ve
+.PP
+If \f(CW$ref\fR is reference, the internal memory address of the referenced value is
+returned as a plain integer. Otherwise \f(CW\*(C`undef\*(C'\fR is returned.
+.PP
+.Vb 3
+\& $addr = refaddr "string"; # undef
+\& $addr = refaddr \e$var; # eg 12345678
+\& $addr = refaddr []; # eg 23456784
+\&
+\& $obj = bless {}, "Foo";
+\& $addr = refaddr $obj; # eg 88123488
+.Ve
+.PP
+\&\fISince Perl version 5.35.7\fR an equivalent function is available as
+\&\f(CW\*(C`builtin::refaddr\*(C'\fR.
+.SS reftype
+.IX Subsection "reftype"
+.Vb 1
+\& my $type = reftype( $ref );
+.Ve
+.PP
+If \f(CW$ref\fR is a reference, the basic Perl type of the variable referenced is
+returned as a plain string (such as \f(CW\*(C`ARRAY\*(C'\fR or \f(CW\*(C`HASH\*(C'\fR). Otherwise \f(CW\*(C`undef\*(C'\fR
+is returned.
+.PP
+.Vb 3
+\& $type = reftype "string"; # undef
+\& $type = reftype \e$var; # SCALAR
+\& $type = reftype []; # ARRAY
+\&
+\& $obj = bless {}, "Foo";
+\& $type = reftype $obj; # HASH
+.Ve
+.PP
+Note that for internal reasons, all precompiled regexps (\f(CW\*(C`qr/.../\*(C'\fR) are
+blessed references; thus \f(CWref()\fR returns the package name string \f(CW"Regexp"\fR
+on these but \f(CWreftype()\fR will return the underlying C structure type of
+\&\f(CW"REGEXP"\fR in all capitals.
+.PP
+\&\fISince Perl version 5.35.7\fR an equivalent function is available as
+\&\f(CW\*(C`builtin::reftype\*(C'\fR.
+.SS weaken
+.IX Subsection "weaken"
+.Vb 1
+\& weaken( $ref );
+.Ve
+.PP
+The lvalue \f(CW$ref\fR will be turned into a weak reference. This means that it
+will not hold a reference count on the object it references. Also, when the
+reference count on that object reaches zero, the reference will be set to
+undef. This function mutates the lvalue passed as its argument and returns no
+value.
+.PP
+This is useful for keeping copies of references, but you don't want to prevent
+the object being DESTROY-ed at its usual time.
+.PP
+.Vb 6
+\& {
+\& my $var;
+\& $ref = \e$var;
+\& weaken($ref); # Make $ref a weak reference
+\& }
+\& # $ref is now undef
+.Ve
+.PP
+Note that if you take a copy of a scalar with a weakened reference, the copy
+will be a strong reference.
+.PP
+.Vb 4
+\& my $var;
+\& my $foo = \e$var;
+\& weaken($foo); # Make $foo a weak reference
+\& my $bar = $foo; # $bar is now a strong reference
+.Ve
+.PP
+This may be less obvious in other situations, such as \f(CWgrep()\fR, for instance
+when grepping through a list of weakened references to objects that may have
+been destroyed already:
+.PP
+.Vb 1
+\& @object = grep { defined } @object;
+.Ve
+.PP
+This will indeed remove all references to destroyed objects, but the remaining
+references to objects will be strong, causing the remaining objects to never be
+destroyed because there is now always a strong reference to them in the \f(CW@object\fR
+array.
+.PP
+\&\fISince Perl version 5.35.7\fR an equivalent function is available as
+\&\f(CW\*(C`builtin::weaken\*(C'\fR.
+.SS unweaken
+.IX Subsection "unweaken"
+.Vb 1
+\& unweaken( $ref );
+.Ve
+.PP
+\&\fISince version 1.36.\fR
+.PP
+The lvalue \f(CW\*(C`REF\*(C'\fR will be turned from a weak reference back into a normal
+(strong) reference again. This function mutates the lvalue passed as its
+argument and returns no value. This undoes the action performed by
+"weaken".
+.PP
+This function is slightly neater and more convenient than the
+otherwise-equivalent code
+.PP
+.Vb 3
+\& my $tmp = $REF;
+\& undef $REF;
+\& $REF = $tmp;
+.Ve
+.PP
+(because in particular, simply assigning a weak reference back to itself does
+not work to unweaken it; \f(CW\*(C`$REF = $REF\*(C'\fR does not work).
+.PP
+\&\fISince Perl version 5.35.7\fR an equivalent function is available as
+\&\f(CW\*(C`builtin::unweaken\*(C'\fR.
+.SS isweak
+.IX Subsection "isweak"
+.Vb 1
+\& my $weak = isweak( $ref );
+.Ve
+.PP
+Returns true if \f(CW$ref\fR is a weak reference.
+.PP
+.Vb 4
+\& $ref = \e$foo;
+\& $weak = isweak($ref); # false
+\& weaken($ref);
+\& $weak = isweak($ref); # true
+.Ve
+.PP
+\&\fBNOTE\fR: Copying a weak reference creates a normal, strong, reference.
+.PP
+.Vb 2
+\& $copy = $ref;
+\& $weak = isweak($copy); # false
+.Ve
+.PP
+\&\fISince Perl version 5.35.7\fR an equivalent function is available as
+\&\f(CW\*(C`builtin::is_weak\*(C'\fR.
+.SH "OTHER FUNCTIONS"
+.IX Header "OTHER FUNCTIONS"
+.SS dualvar
+.IX Subsection "dualvar"
+.Vb 1
+\& my $var = dualvar( $num, $string );
+.Ve
+.PP
+Returns a scalar that has the value \f(CW$num\fR in a numeric context and the value
+\&\f(CW$string\fR in a string context.
+.PP
+.Vb 3
+\& $foo = dualvar 10, "Hello";
+\& $num = $foo + 2; # 12
+\& $str = $foo . " world"; # Hello world
+.Ve
+.SS isdual
+.IX Subsection "isdual"
+.Vb 1
+\& my $dual = isdual( $var );
+.Ve
+.PP
+\&\fISince version 1.26.\fR
+.PP
+If \f(CW$var\fR is a scalar that has both numeric and string values, the result is
+true.
+.PP
+.Vb 2
+\& $foo = dualvar 86, "Nix";
+\& $dual = isdual($foo); # true
+.Ve
+.PP
+Note that a scalar can be made to have both string and numeric content through
+standard operations:
+.PP
+.Vb 4
+\& $foo = "10";
+\& $dual = isdual($foo); # false
+\& $bar = $foo + 0;
+\& $dual = isdual($foo); # true
+.Ve
+.PP
+The \f(CW$!\fR variable is commonly dual-valued, though it is also magical in other
+ways:
+.PP
+.Vb 3
+\& $! = 1;
+\& $dual = isdual($!); # true
+\& print("$!\en"); # "Operation not permitted"
+.Ve
+.PP
+\&\fBCAUTION\fR: This function is not as useful as it may seem. Dualvars are not a
+distinct concept in Perl, but a standard internal construct of all scalar
+values. Almost any value could be considered as a dualvar by this function
+through the course of normal operations.
+.SS isvstring
+.IX Subsection "isvstring"
+.Vb 1
+\& my $vstring = isvstring( $var );
+.Ve
+.PP
+If \f(CW$var\fR is a scalar which was coded as a vstring, the result is true.
+.PP
+.Vb 3
+\& $vs = v49.46.48;
+\& $fmt = isvstring($vs) ? "%vd" : "%s"; #true
+\& printf($fmt,$vs);
+.Ve
+.SS looks_like_number
+.IX Subsection "looks_like_number"
+.Vb 1
+\& my $isnum = looks_like_number( $var );
+.Ve
+.PP
+Returns true if perl thinks \f(CW$var\fR is a number. See
+"looks_like_number" in perlapi.
+.SS openhandle
+.IX Subsection "openhandle"
+.Vb 1
+\& my $fh = openhandle( $fh );
+.Ve
+.PP
+Returns \f(CW$fh\fR itself, if \f(CW$fh\fR may be used as a filehandle and is open, or if
+it is a tied handle. Otherwise \f(CW\*(C`undef\*(C'\fR is returned.
+.PP
+.Vb 4
+\& $fh = openhandle(*STDIN); # \e*STDIN
+\& $fh = openhandle(\e*STDIN); # \e*STDIN
+\& $fh = openhandle(*NOTOPEN); # undef
+\& $fh = openhandle("scalar"); # undef
+.Ve
+.SS readonly
+.IX Subsection "readonly"
+.Vb 1
+\& my $ro = readonly( $var );
+.Ve
+.PP
+Returns true if \f(CW$var\fR is readonly.
+.PP
+.Vb 1
+\& sub foo { readonly($_[0]) }
+\&
+\& $readonly = foo($bar); # false
+\& $readonly = foo(0); # true
+.Ve
+.SS set_prototype
+.IX Subsection "set_prototype"
+.Vb 1
+\& my $code = set_prototype( $code, $prototype );
+.Ve
+.PP
+Sets the prototype of the function given by the \f(CW$code\fR reference, or deletes
+it if \f(CW$prototype\fR is \f(CW\*(C`undef\*(C'\fR. Returns the \f(CW$code\fR reference itself.
+.PP
+.Vb 1
+\& set_prototype \e&foo, \*(Aq$$\*(Aq;
+.Ve
+.SS tainted
+.IX Subsection "tainted"
+.Vb 1
+\& my $t = tainted( $var );
+.Ve
+.PP
+Return true if \f(CW$var\fR is tainted.
+.PP
+.Vb 2
+\& $taint = tainted("constant"); # false
+\& $taint = tainted($ENV{PWD}); # true if running under \-T
+.Ve
+.SH DIAGNOSTICS
+.IX Header "DIAGNOSTICS"
+Module use may give one of the following errors during import.
+.IP "Vstrings are not implemented in this version of perl" 4
+.IX Item "Vstrings are not implemented in this version of perl"
+The version of perl that you are using does not implement Vstrings, to use
+"isvstring" you will need to use a newer release of perl.
+.SH "KNOWN BUGS"
+.IX Header "KNOWN BUGS"
+There is a bug in perl5.6.0 with UV's that are >= 1<<31. This will
+show up as tests 8 and 9 of dualvar.t failing
+.SH "SEE ALSO"
+.IX Header "SEE ALSO"
+List::Util
+.SH COPYRIGHT
+.IX Header "COPYRIGHT"
+Copyright (c) 1997\-2007 Graham Barr <gbarr@pobox.com>. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as Perl itself.
+.PP
+Additionally "weaken" and "isweak" which are
+.PP
+Copyright (c) 1999 Tuomas J. Lukka <lukka@iki.fi>. All rights reserved.
+This program is free software; you can redistribute it and/or modify it
+under the same terms as perl itself.
+.PP
+Copyright (C) 2004, 2008 Matthijs van Duin. All rights reserved.
+Copyright (C) 2014 cPanel Inc. All rights reserved.
+This program is free software; you can redistribute it and/or modify
+it under the same terms as Perl itself.