NAME
Perl::Critic::Policy::References::ProhibitRefChecks - Write is_arrayref($var)
instead of ref($var) eq 'ARRAY'
.
DESCRIPTION
Checking references manually is less efficient that using Ref::Util and prone to typos.
if(ref($var) eq 'ARRYA') # oops!
if(is_arrayref($var)) # ok
if(ref($var) ne 'HASH') # no
if(!is_hashref($var)) # ok
if(ref($var)) # no
if(is_ref($var)) # ok
CONFIGURATION
Explicit strings may be permitted for checks of the form ref(...) eq 'string'
, or ref(...) ne 'string'
. Entries are case insensitive and can be the core types or custom modules.
[References::ProhibitRefChecks]
eq = code
ne = code my::module
As a special scenario, checks of the form ref(...) eq ref(...)
can be permitted with eq = ref
. The same works for ne = ref
.
Regular expression matches are violations by default. To permit checks of the form ref(...) =~ /pattern/
or !~
:
[References::ProhibitRefChecks]
regexp = 1
Since Ref::Util provides is_ref
, in the default configuration the bare ref
call is rarely needed. To specifically permit using direct ref(...)
calls:
[References::ProhibitRefChecks]
bareref = 1
NOTES
Comparisons to stored values or constants are not supported: ref(...) eq $thing
and ref(...) eq HASH()
are violations.
Lexicographic comparison via ref(...) cmp "string"
is a violation.
In/equality checks are not bidirectional: 'HASH' eq ref(...)
will not be considered a violation.
BUGS
Named unary functions are not separately considered. A call of lc(ref $x) eq "array"
is considered a "bare ref check", whereas lc ref($x) eq "array"
is considered an "eq ref check".