my
$AUTHOR
=
"Abdul al Hazred"
;
main();
sub
main {
my
$input
;
my
$outfile
;
my
$result
;
if
(
@ARGV
) {
die
(
"Too many arguments"
)
if
@ARGV
> 2;
$input
=
shift
(
@ARGV
);
if
(
@ARGV
== 1) {
write_result(filter_file(
$input
),
shift
(
@ARGV
));
}
else
{
if
(-d
$input
) {
find({
no_chdir
=> 1,
wanted
=>
sub
{
if
(/\.pm$/ && -f
$_
) { write_result(filter_file(
$_
),
$_
) } }
},
$input
);
}
else
{
write_result(filter_file(
$input
),
$input
);
}
}
}
else
{
write_result(filter_hndl(\
*STDIN
));
}
}
sub
write_result {
my
(
$result
,
$outfile
) =
@_
;
if
(
defined
(
$outfile
)) {
open
(
my
$out_hndl
,
'>'
,
$outfile
);
print
$out_hndl
(
@$result
);
close
(
$out_hndl
);
}
else
{
print
(
@$result
);
}
}
sub
filter_file {
my
$file
=
shift
;
open
(
my
$hndl
,
'<'
,
$file
);
my
$result
= filter_hndl(
$hndl
);
close
(
$hndl
);
return
$result
;
}
sub
filter_hndl {
my
$hndl
=
shift
;
my
(
$line
,
$version
);
my
@filtered
;
while
(
defined
(
$line
= <
$hndl
>)) {
push
(
@filtered
,
$line
);
if
(
$line
=~ /^\s*
(?:
use
\s+version(?:\s+\d+\.\d+)?\s*;\s*)?
our
\s+\
$VERSION
\s*=\s*
(?:version->declare\()?
['"]
(v?\d+(?:\.\d+)+)
['"]
\)?
\s*;\s*$
/x) {
$version
= $1;
last
;
}
}
die
(
"No version found"
)
if
!
defined
(
$version
);
while
(
defined
(
$line
= <
$hndl
>)) {
push
(
@filtered
,
$line
);
last
if
$line
=~ /^\s
*__END__
\s*$/;
}
die
(
"No __END__ found"
)
if
!
defined
(
$line
);
while
(
defined
(
$line
= <
$hndl
>)) {
push
(
@filtered
,
$line
);;
last
if
$line
=~ /^=pod\s*$/;
}
die
(
"No =pod found"
)
if
!
defined
(
$line
);
while
(
defined
(
$line
= <
$hndl
>)) {
if
(
$line
=~ /^\S/) {
$line
=~ s/
$line
=~ s/
}
push
(
@filtered
,
$line
);
}
return
\
@filtered
;
}