sub
register {
return
{
use
=> {
if
=>
'parse_if_args'
,
base
=>
'parse_base_args'
,
parent
=>
'parse_parent_args'
,
},
}}
sub
parse_if_args {
my
(
$class
,
$c
,
$used_module
,
$raw_tokens
) =
@_
;
while
(
my
$token
=
shift
@$raw_tokens
) {
last
if
$token
->[1] eq
'COMMA'
;
}
my
$tokens
= convert_string_tokens(
$raw_tokens
);
my
$module
=
shift
@$tokens
;
if
(
ref
$module
and (
$module
->[1] eq
'WORD'
or
$module
->[1] eq
'KEYWORD'
)) {
$module
=
$module
->[0];
}
if
(is_module_name(
$module
)) {
if
(is_version(
$tokens
->[0])) {
my
$version
=
shift
@$tokens
;
$c
->add_recommendation(
$module
=>
$version
);
}
else
{
$c
->add_recommendation(
$module
=> 0);
}
}
else
{
push
@{
$c
->{errors}},
"use if module not found"
;
}
}
sub
parse_base_args {
my
(
$class
,
$c
,
$used_module
,
$raw_tokens
) =
@_
;
my
$tokens
= convert_string_tokens(
$raw_tokens
);
if
(is_version(
$tokens
->[0])) {
$c
->add(
$used_module
=>
shift
@$tokens
);
}
while
(
my
$token
=
shift
@$tokens
) {
my
$module
=
$token
;
if
(
ref
$module
and (
$module
->[1] ||
''
) eq
'WORD'
) {
$module
=
$module
->[0];
next
if
@$tokens
and
ref
$tokens
->[0] and (
$tokens
->[0][1] ||
''
) eq
'()'
;
}
if
(
ref
$module
and
ref
$module
->[0]) {
$module
=
$module
->[0][0];
}
if
(is_module_name(
$module
)) {
$c
->add(
$module
=> 0);
}
}
}
sub
parse_parent_args {
my
(
$class
,
$c
,
$used_module
,
$raw_tokens
) =
@_
;
my
$tokens
= convert_string_tokens(
$raw_tokens
);
if
(is_version(
$tokens
->[0])) {
$c
->add(
$used_module
=>
shift
@$tokens
);
}
while
(
my
$token
=
shift
@$tokens
) {
last
if
$token
eq
'-norequire'
;
my
$module
=
$token
;
if
(
ref
$token
) {
last
if
$token
->[0] eq
'-norequire'
;
}
if
(
ref
$module
and (
$module
->[1] ||
''
) eq
'WORD'
) {
$module
=
$module
->[0];
next
if
@$tokens
and
ref
$tokens
->[0] and (
$tokens
->[0][1] ||
''
) eq
'()'
;
}
if
(
ref
$module
and
ref
$module
->[0]) {
$module
=
$module
->[0][0];
}
$c
->add(
$module
=> 0)
if
is_module_name(
$module
);
}
}
1;