DESC
=>
'Subroutine "%s" called using indirect syntax'
,
EXPL
=> [349],
};
sub
evaluate {
my
(
$class
,
$file
,
$tokens
,
$src
,
$args
) =
@_
;
my
@forbidden
= (
'new'
);
my
$forbid_arg
=
$args
->{indirect_syntax}->{forbid};
if
(
$forbid_arg
&&
ref
$forbid_arg
eq
'ARRAY'
) {
push
@forbidden
, @{
$forbid_arg
};
}
my
@violations
;
my
$token_num
=
scalar
@$tokens
;
for
(
my
$i
= 0;
$i
<
$token_num
;
$i
++) {
my
$token
=
$tokens
->[
$i
];
my
$token_data
=
$token
->{data};
if
(
$token
->{type} == KEY && any {
$token_data
eq
$_
}
@forbidden
) {
my
$token_type
=
$tokens
->[++
$i
]->{type};
if
(
$token_type
== KEY ||
$token_type
== GLOBAL_VAR ||
$token_type
== VAR ||
$token_type
== LEFT_BRACE
) {
push
@violations
, {
filename
=>
$file
,
line
=>
$token
->{line},
description
=>
sprintf
(DESC,
$token_data
),
explanation
=>
sprintf
(EXPL,
$token_data
),
policy
=> __PACKAGE__,
};
}
}
}
return
\
@violations
;
}
1;