Params::Classify - argument type classification |
Params::Classify - argument type classification
use Params::Classify qw( scalar_class is_undef check_undef is_string check_string is_number check_number is_glob check_glob is_regexp check_regexp is_ref check_ref ref_type is_blessed check_blessed blessed_class is_strictly_blessed check_strictly_blessed is_able check_able );
$c = scalar_class($arg);
if(is_undef($arg)) { check_undef($arg);
if(is_string($arg)) { check_string($arg); if(is_number($arg)) { check_number($arg);
if(is_glob($arg)) { check_glob($arg); if(is_regexp($arg)) { check_regexp($arg);
if(is_ref($arg)) { check_ref($arg); $t = ref_type($arg); if(is_ref($arg, "HASH")) { check_ref($arg, "HASH");
if(is_blessed($arg)) { check_blessed($arg); if(is_blessed($arg, "IO::Handle")) { check_blessed($arg, "IO::Handle"); $c = blessed_class($arg); if(is_strictly_blessed($arg, "IO::Pipe::End")) { check_strictly_blessed($arg, "IO::Pipe::End"); if(is_able($arg, ["print", "flush"])) { check_able($arg, ["print", "flush"]);
This module provides various type-testing functions. These are intended for functions that, unlike most Perl code, care what type of data they are operating on. For example, some functions wish to behave differently depending on the type of their arguments (like overloaded functions in C++).
There are two flavours of function in this module. Functions of the first flavour only provide type classification, to allow code to discriminate between argument types. Functions of the second flavour package up the most common type of type discrimination: checking that an argument is of an expected type. The functions come in matched pairs, of the two flavours, and so the type enforcement functions handle only the simplest requirements for arguments of the types handled by the classification functions. Enforcement of more complex types may, of course, be built using the classification functions, or it may be more convenient to use a module designed for the more complex job, such as the Params::Validate manpage.
This module is implemented in XS, with a pure Perl backup version for systems that can't handle XS.
This module divides up scalar values into the following classes:
These classes are mutually exclusive and should be exhaustive. This classification has been chosen as the most useful when one wishes to discriminate between types of scalar. Other classifications are possible. (For example, the two reference classes are distinguished by a feature of the referenced object; Perl does not internally treat this as a feature of the reference.)
Each of these functions takes one scalar argument (ARG) to be tested,
possibly with other arguments specifying details of the test. Any scalar
value is acceptable for the argument to be tested. Each is_
function
returns a simple truth value result, which is true iff ARG is of the
type being checked for. Each check_
function will return normally
if the argument is of the type being checked for, or will die
if it
is not.
scalar_class(ARG)
is_undef(ARG)
check_undef(ARG)
undef
. is_undef(ARG)
is precisely
equivalent to !defined(ARG)
, and is included for completeness.
is_string(ARG)
check_string(ARG)
undef
and references)
can be coerced to a string, but if you're trying to classify a scalar
then you don't want to do that.
is_number(ARG)
check_number(ARG)
Note that simple (is_string-satisfying) scalars may have independent
numeric and string values, despite the usual pretence that they have
only one value. Such a scalar is deemed to be a number if either it
already has a numeric value (e.g., was generated by a numeric literal
or an arithmetic computation) or its string value has acceptable
syntax for a number (so it can be converted). Where a scalar has
separate numeric and string values (see dualvar in the Scalar::Util manpage), it is
possible for it to have an acceptable numeric value while its string
value does not have acceptable numeric syntax. Be careful to use
such a value only in a numeric context, if you are using it as a number.
scalar_num_part in the Scalar::Number manpage extracts the numeric part of a
scalar as an ordinary number. (0+ARG
suffices for that unless you
need to preserve floating point signed zeroes.)
A number may be either a native integer or a native floating point value, and there are several subtypes of floating point value. For classification, and other handling of numbers in scalars, see the Scalar::Number manpage. For details of the two numeric data types, see the Data::Integer manpage and the Data::Float manpage.
This function differs from looks_like_number
(see
looks_like_number in the Scalar::Util manpage; also looks_like_number in the perlapi manpage
for a lower-level description) in excluding undef
, typeglobs,
and references. Why looks_like_number
returns true for undef
or typeglobs is anybody's guess. References, if treated as numbers,
evaluate to the address in memory that they reference; this is useful
for comparing references for equality, but it is not otherwise useful
to treat references as numbers. Blessed references may have overloaded
numeric operators, but if so then they don't necessarily behave like
ordinary numbers. looks_like_number
is also confused by dualvars:
it looks at the string portion of the scalar.
is_glob(ARG)
check_glob(ARG)
is_regexp(ARG)
check_regexp(ARG)
is_ref(ARG)
check_ref(ARG)
ref_type
(see below), which will return a string such as ``HASH'' or ``SCALAR''.
ref_type(ARG)
undef
if ARG is not a reference to an unblessed object.
Otherwise, determines what type of object is referenced. Returns
``SCALAR'', ``ARRAY'', ``HASH'', ``CODE'', ``FORMAT'', or ``IO''
accordingly.
Note that, unlike ref
, this does not distinguish between different
types of referenced scalar. A reference to a string and a reference to
a reference will both return ``SCALAR''. Consequently, what ref_type
returns for a particular reference will not change due to changes in
the value of the referent, except for the referent being blessed.
is_blessed(ARG)
check_blessed(ARG)
isa
method; see isa in the perlobj manpage).
CLASS must be a string, naming a Perl class.
blessed_class(ARG)
undef
if ARG is not a reference to a blessed object.
Otherwise, returns the class into which the object is blessed.
ref
(see ref in the perlfunc manpage) gives the same result on references
to blessed objects, but different results on other types of value.
blessed_class
is actually identical to blessed in the Scalar::Util manpage.
is_strictly_blessed(ARG)
check_strictly_blessed(ARG)
is_strictly_blessed
appears below.
is_able(ARG)
check_able(ARG)
is_able
appears below.
can
method;
see can in the perlobj manpage). METHODS must be either a single method name or
a reference to an array of method names. Each method name is a string.
This interface check is often more appropriate than a direct ancestry
check (such as is_blessed performs).
Probably ought to handle something like the Params::Validate manpage's scalar type specification system, which makes much the same distinctions.
the Data::Float manpage, the Data::Integer manpage, the Params::Validate manpage, the Scalar::Number manpage, the Scalar::Util manpage
Andrew Main (Zefram) <zefram@fysh.org>
Copyright (C) 2004, 2006, 2007, 2009, 2010 Andrew Main (Zefram) <zefram@fysh.org>
Copyright (C) 2009, 2010 PhotoBox Ltd
This module is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
Params::Classify - argument type classification |