NAME
Util::Underscore::Scalars - Functions for introspecting and manipulating scalars
VERSION
version v1.4.2
FUNCTION REFERENCE
$scalar = _::new_dual $num, $str
-
Creates a new dualvar with numeric value
$num
and string value$str
.In Perl, scalars contain both a numeric value and a string value. Usually, Perl freely converts between the two values. A dualvar disables the syncing between the two values, so that the string value and the numeric value can be completely unrelated.
wrapper for
Scalar::Util::dualvar
$num: the value for the numeric slot
$str: the value for the string slot
returns: a new dualvar
$bool = _::is_dual $scalar
$bool = _::is_dual
-
Checks whether the given scalar is a dualvar.
wrapper for
Scalar::Util::isdual
$scalar: the scalar to check. If omitted, uses
$_
.returns: a boolean value indicating whether the
$scalar
is a dualvar. $bool = _::is_vstring $scalar
$bool = _::is_vstring
-
Checks whether the given
$scalar
was created as a v-string likev127.0.0.1
orv1.0.3
.wrapper for
Scalar::Util::isvstring
$scalar: the scalar to check. If omitted, uses
$_
.returns: a boolean value indicating whether the
$scalar
is a v-string. _::const LVALUE => VALUE
-
Creates a readonly variable containing the specified value.
Note that this makes a deep immutable copy of the value instead of only disallowing reassignment. This works for scalars, arrays, and hashes. Certain care has to be taken for hashes because this locks the keys, and using an illegal key would blow up with an error. Therefore: always use
exists $hash{$key}
to see whether a key exists.Examples:
_::const my $const => 42; _::const my @const => 1, 2, 3; _::const my %const => a => 1, b => 2;
Wrapper for
const
from Const::Fast.LVALUE: an lvalue (scalar, hash, or array variable) to make constant.
VALUE: the value to make deeply immutable and assign. The expression is always evaluated in list context, but the length of the resulting list must match the lvalue type.
returns: n/a
$bool = _::is_readonly $scalar
$bool = _::is_readonly
-
Checks whether the given scalar is readonly, i.e. can't be reassigned.
wrapper for
Scalar::Util::readonly
$scalar: the scalar to check for readonlyness. If omitted, uses
$_
.returns: a boolean indicating whether the
$scalar
is readonly. $bool = _::is_tainted $scalar
$bool = _::is_tainted
-
Checks whether the
$scalar
is tainted.Tainted values come from untrusted sources, such as user input, environment variables, or file contents. The result of a computation with tainted values is itself tainted. Tainting is only traced when requested via the
-t
or-T
command line switch. If activated, certain builtins will refuse to execute with tainted input, such asopen
orsystem
. See perlsec for more information.wrapper for
Scalar::Util::tainted
$scalar: the scalar to check for taintedness. If omitted, uses
$_
.returns: a boolean indicating whether the
$scalar
is tainted. _::alias my $alias = $orig
-
Aliases the first variable to the second scalar, unlike normal assignment which assigns a copy.
Afterwards, the
$alias
will be another name for the$orig
scalar, so\$alias == \$orig
will always be true. As the same scalar is now accessible by two names, changes are also visible under the other name.Aliases occur naturally with the
for
,map
, andgrep
builtins:my @values = qw(a b c); for (@values) { # now $_ is an alias for the current element $_ = 42; } # @values = (42, 42, 42)
but also with subroutine parameters:
sub assign { # the values in @_ are aliases for the arguments $_[0] = $_[1]; return; } my $x = "foo"; assign $x => "bar"; # $x = "bar"
This function is an alias (heh) for the functionality in Data::Alias.
Only available if Data::Alias is already installed. Since Data::Alias has problems with some perl versions, it is not a required dependency.
$alias: an additional name for the
$orig
scalar.$orig: The alias target.
returns: n/a
$bool = _::is_plain $scalar
$bool = _::is_plain
-
Checks that the value is
defined
and not a reference of any kind.This is as close as Perl gets to checking for an ordinary string.
$scalar: the scalar to check. If omitted, uses
$_
.returns: a boolean indicating whether the scalar is plain.
$bool = _::is_string $scalar
$bool = _::is_string
-
Checks that the value is intended to be usable as a string: Either
_::is_plain
returns true, or it is an object that has overloaded stringification.This does not test that the scalar has ever been used as a string, or was assigned as a string, only that it can be used as a string. Note that some data structures (like references) do have a stringification, but this is rarely intended to be actually used and therefore rejected.
$scalar: the scalar to check for stringiness.
returns: a boolean indicating whether the scalar is string-like.
$bool = _::is_bool $scalar
$bool = _::is_bool
-
Checks that the value is intended to be usable as a boolean: The argument can either be a non-reference (i.e. plain scalar or undef), or can be an object that overloads
bool
.This does not check that the argument is some specific value such as
1
or0
. Note also that any value will be interpreted as a boolean by Perl, but not by this function. For example plain references are true-ish, while this function would not consider them to be a valid boolean value.$scalar: the scalar to check. If omitted, uses
$_
.returns: a boolean indicating whether the given
$scalar
can be considered to be a boolean by the rules of this function. $bool = _::is_identifier $string
$bool = _::is_identifier
-
Checks that the given string would be a legal identifier: a letter followed by zero or more word characters.
$string: a string possibly containing an identifier.
returns: a boolean indicating whether the string looks like an identifier.
$bool = _::is_package $string
$bool = _::is_package
-
Checks that the given string is a valid package name. It only accepts
Foo::Bar
notation, not theFoo'Bar
form. This does not assert that the package actually exists.$string: a string possibly containing a package name.
returns: a boolean indicating whether the given string looks like a package name.
$str = _::chomp
$str = _::chomp $line
$str = _::chomp $line, $end
$str_array = _::chomp \@lines
$str_array = _::chomp \@lines, $end
-
Performs the
chomp
builtin on a copy of the input – this will not modify the input.$line, \@lines: a string or a reference to an array of strings. These will not be modified. If omitted, uses
$_
.$end: a string designating the input record separator. If not specified, uses
$/
.returns: If given a single
$line
, returns a copy of that string with theend
removed. If given multiple\@lines
, returns an array reference containing copies of the input lines, with the$end
removed from each copy.Examples:
# assuming the default $/ = "\n": _::chomp ["foo\n", "bar", "baz\n"]; #=> ["foo", "bar", "baz"] # removing a custom terminator: _::chomp "foobar", "bar"; #=> "foo"
$pos = _::index $haystack, $needle
$pos = _::index $haystack, $needle, $start
-
Wraps the builtin
index
function to returnundef
rather than-1
if the$needle
wasn't found in the$haystack
.$haystack: a string in which to search.
$needle: a string for which to search.
$start: the position at which to start searching. This must be a non-negative integer. Defaults to zero.
returns: The position at which the
$needle
was found in the$haystack
, If no match was found, returnsundef
.
BUGS
Please report any bugs or feature requests on the bugtracker website https://github.com/latk/p5-Util-Underscore/issues
When submitting a bug or request, please include a test-file or a patch to an existing test-file that illustrates the bug or desired feature.
AUTHOR
Lukas Atkinson (cpan: AMON) <amon@cpan.org>
COPYRIGHT AND LICENSE
This software is copyright (c) 2017 by Lukas Atkinson.
This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.