LICENSE
Copyright [1999-2015] Wellcome Trust Sanger Institute and the EMBL-European Bioinformatics Institute Copyright [2016-2024] EMBL-European Bioinformatics Institute
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.
CONTACT
Please email comments or questions to the public Ensembl
developers list at <http://lists.ensembl.org/mailman/listinfo/dev>.
Questions may also be sent to the Ensembl help desk at
<http://www.ensembl.org/Help/Contact>.
NAME
Bio::EnsEMBL::Utils::Scalar
SYNOPSIS
use Bio::EnsEMBL::Utils::Scalar qw(check_ref assert_ref wrap_array check_ref_can assert_ref_can assert_numeric assert_integer scope_guard);
check_ref([], 'ARRAY'); # Will return true
check_ref({}, 'ARRAY'); # Will return false
check_ref($dba, 'Bio::EnsEMBL::DBSQL::DBAdaptor'); #Returns true if $dba is a DBAdaptor
# Returns true if all array contents are of the given type
check_array_contents([$dba], 'Bio::EnsEMBL::DBSQL::DBAdaptor');
assert_ref([], 'ARRAY'); #Returns true
assert_ref({}, 'ARRAY'); #throws an exception
assert_ref($dba, 'Bio::EnsEMBL::Gene'); #throws an exception if $dba is not a Gene
# Throws an exception if all array contents are not of the given type
assert_array_contents([$dba], 'Bio::EnsEMBL::Gene'); #throws an exception if $dba is not a Gene
wrap_array([]); #Returns the same reference
wrap_array($a); #Returns [$a] if $a was not an array
wrap_array(undef); #Returns [] since incoming was undefined
wrap_array(); #Returns [] since incoming was empty (therefore undefined)
check_ref_can([], 'dbID'); #returns false as ArrayRef is not blessed
check_ref_can($gene, 'dbID'); #returns true as Gene should implement dbID()
check_ref_can(undef); #Throws an exception as we gave no method to test
assert_ref_can([], 'dbID'); #throws an exception since ArrayRef is not blessed
assert_ref_can($gene, 'dbID'); #returns true if gene implements dbID()
assert_ref_can(undef); #Throws an exception as we gave no method to test
asssert_integer(1, 'dbID'); #Passes
asssert_integer(1.1, 'dbID'); #Fails
asssert_numeric(1E-11, 'dbID'); #Passes
asssert_numeric({}, 'dbID'); #Fails
#Scope guards
my $v = 'wibble';
{
#Build a guard to reset $v to wibble
my $guard = scope_guard(sub { $v = 'wibble'});
$v = 'wobble';
warn $v; # prints wobble
}
# $guard is out of scope; sub is triggered and $v is reset
warn $v; # prints wibble
#Tags are also available for exporting
use Bio::EnsEMBL::Utils::Scalar qw(:assert); # brings in all assert methods
use Bio::EnsEMBL::Utils::Scalar qw(:check); #brings in all check methods
use Bio::EnsEMBL::Utils::Scalar qw(:array); #brings in wrap_array
use Bio::EnsEMBL::Utils::Scalar qw(:all); #import all methods
DESCRIPTION
A collection of subroutines aimed to helping Scalar based operations
METHODS
See subroutines.
MAINTAINER
$Author$
VERSION
$Revision$
check_ref_pp()
Arg [1] : The reference to check
Arg [2] : The type we expect
Description : A subroutine which checks to see if the given object/ref is
what you expect. If you give it a blessed reference then it
will perform an isa() call on the object after the defined
tests. If it is a plain reference then it will use ref().
An undefined value will return a false.
Returntype : Boolean indicating if the reference was the type we
expect
Example : my $ok = check_ref([], 'ARRAY');
Exceptions : If the expected type was not set
Status : Stable
assert_ref_pp()
Arg [1] : The reference to check
Arg [2] : The type we expect
Arg [3] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given object/ref is
what you expect. This behaves in an identical manner as
C<check_ref()> does except this will raise exceptions when
the values do not match rather than returning a boolean
indicating the situation.
Undefs cause exception circumstances.
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean; true if we managed to get to the return
Example : assert_ref([], 'ARRAY');
Exceptions : If the expected type was not set and if the given reference
was not assignable to the expected value
Status : Stable
assert_array_contents
Arg [1] : ArrayRef references to check
Arg [2] : The type we expect
Arg [3] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given objects/refs are
what you expect. This behaves in an identical manner as
C<assert_ref> does works on an array ref of references
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean; true if we managed to get to the return
Example : assert_array_contents([[],[],[]], 'ARRAY');
Exceptions : Throws is references argument is not an ArrayRef, also
if the expected type was not set and if the given reference
was not assignable to the expected value.
Status : Stable
check_array_contents
Arg [1] : ArrayRef references to check
Arg [2] : The type we expect
Arg [3] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given objects/refs are
what you expect.
Returntype : Boolean; true if all contents were as expected
Example : check_array_contents([[],[],[]], 'ARRAY');
Exceptions : Thrown if no type was given
Status : Stable
assert_hash_contents
Arg [1] : HashRef references to check
Arg [2] : The type we expect
Arg [3] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given objects/refs are
what you expect. This behaves in an identical manner as
C<assert_ref> does works on a HashRef of references. Hash keys
are always Strings so do not need asserting.
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean; true if we managed to get to the return
Example : assert_hash_contents({a => [], b => []}, 'ARRAY');
Exceptions : Throws is references argument is not an ArrayRef, also
if the expected type was not set and if the given reference
was not assignable to the expected value.
Status : Stable
check_hash_contents
Arg [1] : HashRef references to check
Arg [2] : The type we expect
Arg [3] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given objects/refs are
what you expect.
Returntype : Boolean; true if all contents were as expected
Example : check_hash_contents({a => [], b => []}, 'ARRAY');
Exceptions : Thrown if no type was given
Status : Stable
wrap_array()
Arg : The reference we want to wrap in an array
Description : Takes in a reference and returns either the reference if it
was already an array, the reference wrapped in an array or
an empty array (if the given value was undefined).
Returntype : Array Reference
Example : my $a = wrap_array($input);
Exceptions : None
Status : Stable
check_ref_can
Arg [1] : The reference to check
Arg [2] : The method we expect to run
Description : A subroutine which checks to see if the given object/ref is
implements the given method. This is very similar to the
functionality given by C<UNIVERSAL::can()> but works
by executing C<can()> on the object meaning we consult the
object's potentially overriden version rather than Perl's
default mechanism.
Returntype : CodeRef
Example : check_ref_can($gene, 'dbID');
Exceptions : If the expected type was not set.
Status : Stable
assert_ref_can
Arg [1] : The reference to check
Arg [2] : The method we expect to run
Arg [3] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given object/ref is
implements the given method. Will throw exceptions.
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean; true if we managed to get to the return
Example : assert_ref_can($gene, 'dbID');
Exceptions : If the reference is not defined, if the object does not
implement the given method and if no method was given to check
Status : Stable
assert_numeric_pp
Arg [1] : The Scalar to check
Arg [2] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given scalar is
number or not. If not then we raise exceptions detailing why
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean; true if we had a numeric otherwise we signal failure
via exceptions
Example : assert_numeric(1, 'dbID');
Exceptions : If the Scalar is not defined, if the Scalar was blessed and
if the value was not a number
Status : Stable
assert_integer_pp
Arg [1] : The Scalar to check
Arg [2] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given scalar is
a whole integer; we delegate to L<assert_numeric> for number
checking.
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean; true if we had a numeric otherwise we signal failure
via exceptions
Example : assert_integer(1, 'dbID');
Exceptions : See L<assert_numeric> and we raise exceptions if the value
was not a whole integer
Status : Stable
assert_boolean
Arg [1] : The Scalar to check
Arg [2] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given scalar is
a boolean i.e. value is set to C<1> or C<0>
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean; true if we were given a boolean otherwise we signal
failure via exceptions
Example : assert_boolean(1, 'is_circular');
Exceptions : See L<assert_integer> and we raise exceptions if the value
was not equal to the 2 valid states
Status : Stable
assert_strand
Arg [1] : The Scalar to check
Arg [2] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given scalar is
a whole integer and if the value is set to C<1>, C<0> or C<-1>
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean; true if we had a strand integer otherwise we signal
failure via exceptions
Example : assert_strand(1, 'strand');
Exceptions : See L<assert_integer> and we raise exceptions if the value
was not equal to the 3 valid states
Status : Stable
assert_file_handle
Arg [1] : The Scalar to check
Arg [2] : The attribute name you are asserting; not required but allows
for more useful error messages to be generated. Defaults to
C<-Unknown->.
Description : A subroutine which checks to see if the given scalar is
actually a file handle. This will handle those which are Glob
references and those which inherit from C<IO::Handle>. It will
also cope with a blessed Glob reference.
You can turn assertions off by using the global variable
$Bio::EnsEMBL::Utils::Scalar::ASSERTIONS = 0
Returntype : Boolean;
Example : assert_file_handle($fh, '-FILE_HANDLE');
Exceptions : Raised if not defined, not a reference and was not a
GLOB or did not inherit from IO::Handle
Status : Stable
split_array
Arg [1] : Integer Maximum size of an array produced
Arg [2] : ArrayRef The array to split
Description : Takes an array of values and splits the array into multiple
arrays where the maximum size of each array is as specified
Example : my $split_arrays = split_array($large_array, 10);
Returntype : ArrayRef of ArrayRefs where each element is a split list
scope_guard
Arg [1] : CodeRef The block of code to exit once it escapes out of scope
Description : Simple subroutine which blesses your given code reference into
a L<Bio::EnsEMBL::Utils::Scalar::ScopeGuard> object. This has
a DESTROY implemented which will cause the code reference
to execute once the object goes out of scope and its reference
count hits 0.
Returntype : Bio::EnsEMBL::Utils::Scalar::ScopeGuard
Example : my $v = 'wibble';
{
#Build a guard to reset $v to wibble
my $guard = scope_guard(sub { $v = 'wibble'});
$v = 'wobble';
warn $v;
}
# $guard is out of scope; sub is triggered and $v is reset
warn $v;
Exceptions : Raised if argument was not a CodeRef
Status : Stable