#!/usr/local/bin/perl
package cpanfm;
use base qw(Term::Shell);
my $obj = cpanfm->new();
$obj->cmdloop;
use strict;
use warnings;
use CPAN;
use CPANPLUS;
use Cwd;
use FindBin qw( $Bin );
use lib "$Bin/../lib";
use Find::Lib libs => [ 'lib', '../lib', 'devlib' ];
use ExtUtils::MakeMaker qw(prompt);
use IPC::System::Simple qw(capture);
use Term::ReadLine;
use version 0.77; our $VERSION = version->declare("v0.0.1");
sub prompt_str {
my $cwd = cwd;
$cwd =~ s[^\Q$ENV{HOME}\E][~];
"cpanfm> "
}
sub run_help {
print
"z\n",
"123\n",
"a\n",
"acme_kwalitee\n",
"builtin_vars\n",
"c\n",
"cat\n",
"checkenv\n",
"con_name\n",
"concise\n",
"cover\n",
"cpan\n",
"cpanp\n",
"cpanfm_info\n",
"critic\n",
"d\n",
"deparse\n",
"details\n",
"diff\n",
"du\n",
"dump_sizes\n",
"fathom\n",
"fetch\n",
"file_size\n",
"finddeps\n",
"find_exe\n",
"find_lib\n",
"func_list\n",
"git\n",
"id\n",
"infometa\n",
"inject\n",
"is_core\n",
"kwalitee\n",
"lex\n",
"license\n",
"lint\n",
"listm\n",
"look\n",
"ls\n",
"m\n",
"minicpan\n",
"mini_inject\n",
"minismokebox\n",
"mod_info\n",
"modebug\n",
"monk\n",
"namespace\n",
"nytprof\n",
"parse_backpan\n",
"parse_cpan\n",
"parse_mod\n",
"parse_modlist\n",
"parse_ratings\n",
"pause\n",
"perldoc\n",
"perldoc_f\n",
"perldoc_m\n",
"perldoc_q\n",
"perldoc_perllocal\n",
"perlmod\n",
"pler\n",
"pmcv\n",
"pmpath\n",
"prereq\n",
"probe\n",
"proctab\n",
"readme\n",
"recent\n",
"reports\n",
"runprove\n",
"score\n",
"search\n",
"sysinfo\n",
"systrace\n",
"terse_size\n",
"test\n",
"tracedeps\n",
"up\n",
"vers_mod\n",
"versys\n",
"wc\n",
"whereis\n",
"xcopy\n",
"xref\n";
}
sub run_cpanfm_info {
print "\nModules, Perl, OS info:\n",
"\ncpanfm was built using these modules:\n",
" strict 1.03\n",
" warnings 1.05\n",
" Term::Shell 0.02\n",
" App::Rad 1.04\n",
" Cwd 3.3\n",
" CPAN 1.9402\n",
" CPANPLUS 0.88\n",
" lib 0.5565\n",
" ExtUtils::MakeMaker 6.54\n",
" IPC::System::Simple 1.18\n",
" Getopt::Long 2.38\n",
" Pod::Usage 1.36\n",
" CPAN::FindDependencies 2.32\n",
" Module::Info 0.31\n",
" Yahoo::Search 1.10.13\n",
" Module::Release 2.05\n",
" CPAN::Mini::Visit 0.11\n",
" CPAN::Mini 0.576\n",
" Parse::BACKPAN::Packages 0.35\n",
" File::Size 0.06\n",
" Test::Run::CmdLine 0.0120\n",
" Module::CoreList 2.18\n",
" Parse::CPAN::Modlist 0.9\n",
" Module::Versions 0.02\n",
" Parse::CPAN::Ratings 0.33\n",
" Acme::CPANAuthors::Utils::Kwalitee 0.09\n",
" WWW::PAUSE::RecentUploads 0.03\n",
" Perl::Critic 1.103\n",
" CPAN::Dependency 0.15\n",
" Devel::Size 0.71\n",
" Data::Dumper 2.125\n",
" Data::Dumper::Perltidy 0.01\n",
" Devel::Leak 0.03\n",
" B::PerlReq 0.70\n",
" CPAN::PackageDetails 0.20\n",
" File::Spec 3.3\n",
" Module::Collection 0.02\n",
" Smart::Comments 1.0.3\n",
" App::SmokeBox::Mini 0.18\n",
" FindBin 1.47\n",
" Test::Smoke::SysInfo 0.042\n",
" Module::License::Report 0.02\n",
" Proc::ProcessTable 0.45\n",
" WWW::CPAN 0.011\n",
" Probe::Perl 0.01\n",
" Text::Diff 1.37\n",
" Text::Diff::Table 1.37\n",
" Devel::TraceDeps 0.0.3\n",
" Term::ReadLine 1.02\n",
" File::Fetch 0.02\n",
" App::CPAN::Fast 0.03\n",
" CPANPLUS::Module 0\n",
" Text::Balanced 1.95\n",
" Net::FTP 2.77\n",
" XML::RSS::Headline::UsePerlJournals 2.32\n",
" LWP::Simple 5.827\n",
" XML::RSS::Headline::PerlMonks 0.02\n",
" Parse::CPAN::Authors 2.27\n",
" App::Prove 3.17\n",
" perlmoduleinstaller 3.1.0\n",
" B::Concise\n",
" B::Debug\n",
" B::Deparse\n",
" B::C 1.04_20\n",
" B::LexInfo 0.02\n",
" B::Lint 1.11\n",
" B::TerseSize 0.09\n",
" B::Fathom 0.07\n",
" B::Xref core\n",
" Devel::NYTProf 2.10\n",
" Devel::System::Trace 0.0.2\n",
"\nYour System:\n",
" Perl $]\n",
" OS $^O\n",
" $0\n";
}
sub run_finddeps {
use CPAN::FindDependencies;
my $mod = prompt("Enter module name: ");
my @dependencies = CPAN::FindDependencies::finddeps($mod);
foreach my $dep (@dependencies) {
print ' ' x $dep->depth();
print $dep->name().' ('.$dep->distribution().")\n";
}
}
sub run_finddeps_man {
system('perldoc CPAN::FindDependencies');
}
sub run_finddeps_smry { print "Finds a module's dependencies\n"; }
sub run_finddeps_help {
print
"finddeps: At the prompt, enter the name of one module or one distribu
+tion.
It'll return the dependency tree for that module.\n";
}
sub run_mod_info {
use Module::Info;
my $mod = prompt("Enter module name: ");
my $info = capture("module_info -a $mod");
print "$info\n";
}
sub run_mod_info_man {
system('perldoc module_info');
}
sub run_mod_info_smry {
print
"Lists: \n",
"Module name\n",
"Version\n",
"Directory\n",
"if core or not\n",
"Modules used\n",
"Packages created\n",
"Subroutines defined\n";
}
sub run_mod_info_help {
print
"mod_info: At the prompt, enter a module name. It'll do the rest.\
+n",
"run_mod_info can also be adjusted if you want. See mod_info_man t
+o see\n",
"what other options are available.\n";
}
sub run_a {
CPAN::Shell->a;
}
sub run_a_smry {
print
"Returns:\n",
"a - Returns all authors CPANID, name, and email address\n",
"\n";
}
sub run_a_help {
print
"Examples: \n",
"Enter at the prompt: \n",
"a\n",
"\n";
}
sub run_d {
CPAN::Shell->d;
}
sub run_d_smry {
print
"d - Returns all distributions, CPANIDs, and email addresses\n",
"\n";
}
sub run_d_help {
print
"Examples: \n",
"Enter at the prompt: \n",
"d\n",
"\n";
}
sub run_ls {
my $auth = prompt("Enter author's CPANID: ");
CPAN::Shell->ls($auth);
}
sub run_ls_smry {
print
"ls - returns size, release date, CPANID, and Module name\n",
"\n";
}
sub run_ls_help {
print
"Enter at the prompt: \n",
"ls CPANID\n",
"\n";
}
sub run_m {
CPAN::Shell->m;
}
sub run_m_smry {
print "m - lists all modules on CPAN\n";
}
sub run_m_help {
print
"m - lists all modules on CPAN, for example:
Module your (MSCHWERN/your-1.00.tar.gz)\n";
}
sub run_perlmod {
my $mod = prompt("Enter module name: ");
system("perlmod -i $mod");
print "We'll double-check using pmpath:\n";
system("pmpath $mod");
}
sub run_id {
my $mod = prompt("Enter module name: ");
CPAN::Shell->m($mod);
}
sub run_reports {
my $mod = prompt("Enter module name: ");
CPAN::Shell->reports($mod);
}
sub run_cpan_shell_man {
system('perldoc CPAN');
}
sub run_search {
use Yahoo::Search;
my $mod = prompt("Enter Yahoo search term: ");
my @Results = Yahoo::Search->Results( Doc => $mod,
AppId => "YahooDemo",
Mode => 'all',
Type => 'html'
);
for my $Result (@Results)
{
printf "Result: #%d\n", $Result->I + 1,
printf "Url: %s\n", $Result->Url;
printf "%s\n", $Result->ClickUrl;
printf "Summary: %s\n", $Result->Summary;
printf "Title: %s\n", $Result->Title;
printf "In Cache: %s\n", $Result->CacheUrl;
print "\n";
}
}
sub run_search_man {
system('perldoc Yahoo::Search');
}
sub run_kwalitee {
use Module::Release::Kwalitee;
my $mod = prompt("Enter path for Kwalitee search: ");
my $kwalitee = capture("cpants_lint.pl $mod")
or return &prompt_str;
print $kwalitee, "\n";
}
sub run_kwalitee_man {
system('perldoc Module::Release::Kwalitee');
}
sub run_visit {
use CPAN::Mini::Visit;
my $auth = prompt("Enter author name: ");
CPAN::Mini::Visit->new(
minicpan => '/home/kevin/minicpan',
author => $auth,
callback => sub {
print "$_[0]->{counter} - $_[0]->{dist}\n";
},
)->run
or return &prompt_str;
}
sub run_visit_man {
system('perldoc CPAN::Mini::Visit');
}
sub run_listm {
my $auth = prompt("Enter author name: ");
$auth = capture("cpan -L $auth");
print $auth, "\n";
}
sub run_parse_backpan {
use Parse::BACKPAN::Packages;
my $p = Parse::BACKPAN::Packages->new();
my @authors = $p->authors;
print "@authors\n";
print "BACKPAN is " . $p->size . " bytes\n";
}
sub run_parse_backpan_man {
system('perldoc Parse::BACKPAN::Packages');
}
sub run_readme {
my $mod = prompt("Enter module name: ");
CPAN::Shell->readme($mod);
}
sub run_perldoc {
my $mod = prompt("Enter module name: ");
my $pd = capture("perldoc $mod");
print $pd, "\n";
}
sub run_perldoc_man {
system('perldoc perldoc');
}
sub run_perldoc_m {
my $mod = prompt("Enter module name: ");
my $pd = capture("perldoc -m $mod");
print $pd, "\n";
}
sub run_perldoc_f {
my $func = prompt("Enter function name: ");
my $pd = capture("perldoc -f $func");
print $pd, "\n";
}
sub run_perldoc_q {
my $faq = prompt("Enter keyword: ");
my $pd = capture("perldoc -q $faq");
print $pd, "\n";
}
sub run_perldoc_perllocal {
my $pd = capture("perldoc perllocal");
print $pd, "\n";
}
sub run_cat {
my $ct = prompt("Enter path: ");
my $ctm = capture("cat $ct");
print $ctm, "\n";
}
sub run_cat_man {
system('man cat');
}
sub run_look {
my $d = prompt("Enter distribution name: ");
CPAN::Shell->look($d);
}
sub run_test {
my $mod = prompt("Enter module name: ");
CPAN::Shell->test($mod);
}
sub run_runprove {
use Test::Run::CmdLine;
my $mpath = prompt("Enter module path to tests: ");
my $pr = capture("prove -v --timer $mpath");
print $pr, "\n";
}
sub run_prove_man {
system('perldoc Test::Run::CmdLine');
}
sub run_is_core {
my $core = prompt("Enter module name: ");
$core = capture("corelist -a $core");
print $core, "\n";
}
sub run_is_core_man {
system('perldoc Module::CoreList');
}
sub run_parse_modlist {
use Parse::CPAN::Modlist;
my $modlist = prompt("Enter path to 03modlist: ");
my $p = Parse::CPAN::Modlist->new($modlist);
foreach my $name ($p->modules) {
my $module = $p->module($name);
print " The module '".$module->name."'".
" is written by ".$module->author.
" and is described as '".$module->description.
"'\n";
}
}
sub run_parse_modlist_man {
system('perldoc Parse::CPAN::Modlist');
}
sub run_parse_mod {
use Parse::CPAN::Modlist;
my $name = prompt("Enter module names: ");
my $p = Parse::CPAN::Modlist->new(
'/home/kevin/Desktop/03modlist.data');
my $module = $p->module($name);
print " The module '".$module->name."'".
" is written by ".$module->author.
" and is described as '".$module->description.
"'\n";
}
sub run_vers_mod {
use Module::Versions;
my $mods = prompt("Enter module name: ");
my $vers = Module::Versions
->new($mods)
->list;
}
sub run_vers_mod_man {
system('perldoc Module::Versions');
}
sub run_parse_ratings {
#at the prompt, enter a distribution like Archive-Zip, not Archive:
+:Zip.
use Parse::CPAN::Ratings;
use Parse::CPAN::Ratings::Rating;
my $distribution = prompt("Enter distribution name: ");
my $ratings = Parse::CPAN::Ratings->new(
filename => '/home/kevin/Desktop/all_ratings.csv'
);
my $rating = $ratings->rating("$distribution");
print $rating->distribution . "\n";
print $rating->rating . "\n";
print $rating->review_count . "\n";
}
sub run_parse_ratings_man {
system('perldoc Parse::CPAN::Ratings');
}
sub run_acme_kwalitee {
use Acme::CPANAuthors::Utils::Kwalitee;
use Data::Dumper::Perltidy;
my $auth = prompt("Enter author id: ");
my $info = Acme::CPANAuthors::Utils::Kwalitee->fetch($auth);
print Dumper $info;
}
sub run_acme_kwalitee_man {
system('perldoc Acme::CPANAuthors::Utils::Kwalitee');
}
sub run_pause {
use WWW::PAUSE::RecentUploads;
my $up1 = prompt("Enter login name: ");
my $up2 = prompt("Enter password: ");
my $pause = WWW::PAUSE::RecentUploads->new(
login => $up1,
pass => $up2,
);
my $data = $pause->get_recent
or die "Failed to fetch data: " . $pause->error;
foreach my $dist ( @$data ) {
print "$dist->{dist} by $dist->{name} (size: $dist->{size}\n";
}
sub run_pause_man {
system('perldoc WWW::PAUSE::RecentUploads');
}
sub run_critic {
use Perl::Critic;
my $mod = prompt("Enter path to file: ");
$mod = system("perlcritic --statistics-only $mod");
print $mod, "\n";
}
sub run_critic_man {
system('perldoc Perl::Critic');
}
sub run_score {
use CPAN::Dependency;
my $mod = prompt("Enter module name: ");
my $cpandep = new CPAN::Dependency verbose => 1, process => ALL_CP
+AN;
$cpandep->run;
$cpandep->calculate_score;
my $score;
my %score = $cpandep->score_by_dists;
my @dists = sort { $score{$b} <=> $score{$a} } keys %score;
print "Top 10 modules\n";
for my $dist(@dists[0..9]) {
printf "%5d %s\n", $score{$dist}, $dist;
}
sub run_score_man {
system('perldoc CPAN::Dependency');
}
sub run_dump_sizes {
use Devel::DumpSizes qw/dump_sizes/;
use Data::Dumper::Perltidy;
my $path = prompt("Enter file path: ");
&Devel::DumpSizes::dump_sizes($path);
print Dumper dump_sizes;
}
sub run_dump_sizes_man {
system('perldoc Devel::DumpSizes');
}
sub run_leak {
#Not that useful now, but it will be later
use Data::Dumper::Perltidy;
use Devel::Leak;
my $handle;
my $count = Devel::Leak::NoteSV($handle);
Devel::Leak::CheckSV($handle);
print Dumper "$count\n, $handle\n";
}
sub run_leak_man {
system('perldoc Devel::Leak');
}
sub run_prereq {
use B::PerlReq;
my $req = prompt( "Enter path to source" );
my $con_name = capture("perl.req -v -m strict $req" );
print $con_name, "\n";
}
sub run_prereq_man {
system('perldoc B::PerlReq');
}
sub run_con_name {
use B::PerlReq;
my $req = prompt( "Enter path to source" );
my $con_name = capture("perl.prov -v $req" );
print $con_name, "\n";
}
sub run_con_name_man {
system('perldoc B::PerlReq');
}
sub run_used_man {
sytem('perldoc Module::Used');
}
sub run_details {
use POE;
use CPAN::PackageDetails;
my $package_details = CPAN::PackageDetails->new(
file => "02packages.details.txt",
url => "ftp://ftp.perl.org/CPAN/modules/02packages.detail
+s.txt",
description => "Package names for a private CPAN",
columns => "package name, version, path",
intended_for => "minicpan",
written_by => "$0 using CPAN::PackageDetails
$CPAN::PackageDetails::VERSION",
last_updated => "CPAN::PackageDetails->format_date",
allow_packages_only_once => 0,
);
my $package = 'Some::Package';
my $path = '/path/to/Some/Package.pm';
my $file = '02packages.details.txt';
my $version = 0.0.1;
$package_details->add_entry(
package_name => $package,
version => $package->VERSION,
path => $path
);
print "About to write ", $package_details->count, "entries\n";
$package_details->write_file($file);
$package_details->write_fh(\*STDOUT);
}
sub run_details_man {
system('perldoc CPAN::PackageDetails');
}
sub run_pmcv {
use File::Spec ();
use Getopt::Long ();
use Module::Collection ();
use vars qw{$VERSION};
BEGIN {
$VERSION = '0.02';
$| = 1;
}
BEGIN { eval "use Smart::Comments;" }
my $VERBOSE = 0;
my $NEWEST = 0;
my $MERGED = 0;
Getopt::Long::GetOptions(
"verbose+" => \$VERBOSE,
"newest" => \$NEWEST,
"merged" => \$MERGED,
);
$NEWEST = 1 if $MERGED;
my $root = defined $ARGV[0]
? shift(@ARGV)
: File::Spec->curdir;
print "Searching for dists... ";
my $collection = Module::Collection->new( root => '/home/kevin/minicpa
+n');
my $found = $collection->dists
or die "$root does not contain any distributions";
print "found $found\n";
my @dists = $collection->dists;
if ( $NEWEST or $VERBOSE or $MERGED ) {
foreach ( @dists ) { ### Loading dists [===| ] %
$collection->dist($_);
}
}
$collection->ignore_old_dists if $NEWEST;
print "\n";
foreach my $file ( $collection->dists ) {
unless ( $VERBOSE ) {
# Short form
print "$file\n";
next;
}
my $dist = $collection->dist($file);
print "\n";
print "$file\n";
print " Name: " . $dist->dist_name . "\n";
print " Version: " . $dist->dist_version . "\n";
if ( $VERBOSE >= 2 ) {
# Regular Dependencies
my $requires = $dist->dist_requires;
if ( keys %$requires ) {
print " Requires:\n";
foreach ( sort keys %$requires ) {
print " $_: $requires->{$_}\n";
}
} else {
print " Requires: Nothing\n";
}
my $build_requires = $dist->dist_build_requires;
if ( keys %$build_requires ) {
print " Build Requires:\n";
foreach ( sort keys %$build_requires ) {
print " $_: $build_requires->{$_}\n";
}
} else {
print " Build Requires: Nothing\n";
}
}
}
if ( $MERGED ) {
print "\n";
print "Listing Merged Depencies:\n";
my $merged = $collection->depends;
print $merged->as_string;
}
exit(0);
}
sub run_pmcv_man {
system('perldoc Module::Collection');
}
sub run_minismokebox {
use App::SmokeBox::Mini;
print "****SMOKING IS HAZARDOUS TO YOUR HEALTH****\n";
my $warn = prompt("Do you agree with the warning? (yes/no): ");
if ($warn eq 'yes') {
my $dist = prompt("Enter distribution name : ");
my $mini = system("minismokebox --debug --package $dist");
}
else {
print "Sorry! Have a good day!", "\n";
}
}
sub run_minismokebox_man {
system('perldoc App::SmokeBox::MIni');
}
sub run_file_size {
use File::Size;
my $mod = prompt("Enter module name: ");
$mod = File::Size->new(
dir => $mod,
blocksize => 1024,
humanreadable => 1
);
print $mod->getsize(), "\n";
}
sub run_file_size_man {
system('perldoc File::Size');
}
sub run_sysinfo {
$| = 1;
use vars qw( $VERSION );
$VERSION = 0.001;
use File::Spec;
use FindBin;
use lib File::Spec->catdir( $FindBin::Bin, 'lib' );
use lib $FindBin::Bin;
use Test::Smoke::SysInfo;
my $si = Test::Smoke::SysInfo->new ();
printf "Hostname : %s\n", $si->host;
printf "Number of CPU's : %s\n", $si->ncpu;
printf "Processor type : %s\n", $si->cpu_type; # short
printf "Processor description: %s\n", $si->cpu; # long
printf "OS and version : %s\n", $si->os;
}
sub run_sysinfo_man {
system('perldoc Test::Smoke::Info');
}
sub run_versys {
$| = 1;
use vars qw( $VERSION );
$VERSION = 0.001;
use File::Spec;
use FindBin;
use lib File::Spec->catdir( $FindBin::Bin, 'lib' );
use lib $FindBin::Bin;
use Test::Smoke::SysInfo;
my $si = Test::Smoke::SysInfo->new ();
printf "Hostname : %s\n", $si->host;
printf "Number of CPU's : %s\n", $si->ncpu;
printf "Processor type : %s\n", $si->cpu_type; # short
printf "Processor description: %s\n", $si->cpu; # long
printf "OS and version : %s\n", $si->os;
system('perl -V');
}
sub run_pmpath {
my $mod = prompt("Enter module name: ");
my $cp = capture("pmpath $mod");
print "$cp\n";
}
sub run_license {
use Module::License::Report;
my $mod = prompt("Enter module name: ");
my $reporter = Module::License::Report->new();
my $license = $reporter->license( $mod );
print $license, "\n";
print $license->package_name($mod), "\n";
print $license->package_version($mod), "\n";
print $license->confidence(), "\n";
}
sub run_proctab {
use Proc::ProcessTable;
my $ref = new Proc::ProcessTable;
foreach my $proc (@{$ref->table}) {
if(@ARGV) {
next unless grep {$_ == $proc->{pid}} @ARGV;
}
print "--------------------------------\n";
foreach my $field ($ref->fields){
print $field, ": ", $proc->{$field}, "\n";
}
}
}
sub run_proctab_man {
system('perldoc Proc::ProcessTable');
}
sub run_infometa {
use WWW::CPAN;
my $mod = prompt("Enter module name, using a hyphen instaed of a d
+ouble colon: ");
my $cap = capture("cpanq meta $mod");
print $cap, "\n";
}
sub run_probe {
use Probe::Perl;
my $p = Probe::Perl->new();
my $ver = $p->perl_version();
$ver = $p->perl_version_to_float($ver);
my $path = $p->find_perl_interpreter();
my $bool = $p->perl_is_same($path);
my @paths = $p->perl_inc();
my $type = $p->os_type();
print $ver, "\n";
print $path, "\n";
print $bool, "\n";
print @paths, "\n";
print $type, "\n";
}
sub run_diff {
use Text::Diff;
use Text::Diff::Table;
my $file1 = prompt("Enter file1: ");
my $file2 = prompt("Enter file2: ");
my $diff = Text::Diff::Table->new;
$diff = diff $file1, $file2, { STYLE => "Table" };
print $diff, "\n";
}
sub run_diff_man {
system("perldoc Text::Diff");
}
sub run_whereis {
my $app = prompt("Enter name of app: ");
system("whereis $app");
}
sub run_whereis_man {
system("man whereis");
}
sub run_du {
my $dir = prompt("Enter path: ");
system("du -achk $dir");
}
sub run_du_man {
system("man du");
}
sub run_z {
my $cmd = prompt("Enter code: ");
system($cmd);
}
sub run_recent {
use App::CPAN::Fast;
system("cpanf -l");
}
sub run_fetch {
use File::Fetch;
$File::Fetch::DEBUG = 1;
my $fetch = prompt("Enter uri to fetch: ");
my $there = prompt("Enter where you want the file placed: ");
my $ff = File::Fetch->new(uri => $fetch);
my $where = $ff->fetch(to => $there) or croak $ff->error;
}
}
}
sub run_123 {
use Net::FTP;
use constant HOST => 'ftp.cpan.org';
use constant DIR1 => '/pub/CPAN/authors';
use constant FILE1 => '01mailrc.txt.gz';
use constant DIR2 => '/pub/CPAN/modules';
use constant FILE2 => '02packages.details.txt.gz';
use constant FILE3 => '03modlist.data.gz';
my $ftp = Net::FTP->new(
HOST,
Debug => 1,
Passive => 1,
Timeout => 1
);
$ftp->login('anonymous');
$ftp->cwd(DIR1);
$ftp->ascii;
$ftp->get(FILE1);
$ftp->cwd(DIR2);
$ftp->get(FILE2);
$ftp->size(FILE2);
$ftp->get(FILE3);
$ftp->quit;
}
#sub run_cover {
#use Devel::Cover;
#use Data::Dumper;
#my $cov = prompt("Enter your path to program: ");
#$cov = system(
#cover has some problems...working on fix
# "perl -MDevel::Cover $cov cover"
#);
#print Dumper $cov, "\n";
#}
sub run_up {
no warnings;
use XML::RSS::Feed;
use XML::RSS::Headline::UsePerlJournals;
use LWP::Simple qw(get);
my $feed = XML::RSS::Feed->new(
name => "useperljournals",
hlobj => "XML::RSS::Headline::UsePerlJournals",
delay => 60,
url => "http://use.perl.org/search.pl?tid=&query=&"
. "author=&op=journals&content_type=rss",
);
while (1) {
$feed->parse(get($feed->url));
print $_->headline . "\n" for $feed->late_breaking_news;
sleep($feed->delay);
}
sub run_monk {
use XML::RSS::Feed;
use XML::RSS::Headline::PerlMonks;
use LWP::Simple qw(get);
my $feed = XML::RSS::Feed->new(
name => "newmonknodes",
url => "http://perlmonks.org/index.pl?node_id=30175;xmlstyle=rss
+",
hlobj => "XML::RSS::Headline::PerlMonks",
tmpdir => "/Users/rafferty/Desktop/tmp",
);
while (1) {
$feed->parse( get( $feed->url ) );
for my $post ( $feed->late_breaking_news ) {
print "New perlmonks posting from " . $post->authortitle . "\n
+";
print "Category: " . $post->category . "\n";
print "Subject: " . $post->headline . "\n";
print "Link: " . $post->url . "\n\n";
}
return &prompt_str
}
}
sub run_parse_cpan {
use Data::Dumper;
use Parse::CPAN::Authors;
my $m = prompt("Enter path to 01mailrc.txt.gz: ");
my $p = Parse::CPAN::Authors->new( $m );
my @authors = $p->authors;
print Dumper @authors, "\n";
}
}
sub run_func_list {
system('pmpath Pod::Functions');
my $f = prompt("Enter path to Pod::Functions: \n");
system("perl $f");
}
sub run_builtin_vars {
use B::Keywords qw( @Symbols @Barewords );
print join "\n", @Symbols,
@Barewords,
"\n";
}
sub run_checkenv {
foreach (sort keys %ENV) {
print "$_ = $ENV{$_}\n";
}
}
sub run_pler {
my $t = prompt("Enter path to test: ");
system("perl $t");
}
{
sub run_explain {
use YAPE::Regex::Explain;
my $re = prompt("Enter regexp: ");
my $exp = YAPE::Regex::Explain->new($re)->explain;
print $exp, "\n";
}
sub run_bench {
use Benchmark::Timer;
use Statistics::TTest;
use Statistics::Distributions;
use Statistics::Descriptive;
my $bn = prompt("Enter code to benchmark: ");
my $t = Benchmark::Timer->new(skip => 0, minimum => 10, confidence =>
+97.5, error => 2);
while($t->need_more_samples($bn)) {
$t->start($bn);
sleep(5);
$t->stop($bn);
}
print $t->report;
}
sub run_profiler {
use Devel::Profiler;
my $mod = prompt("Enter path to script to test: ");
my $scr = system("perl -MDevel::Profiler $mod");
print $scr, "\n";
system('dprofpp -u');
}
sub run_find_exe {
use File::Spec;
use SVN::Notify;
my $exe_name = prompt("Enter name of executable: ");
my $exe = SVN::Notify->find_exe($exe_name);
print "$exe\n";
}
}
sub run_cpan {
system("cpan");
}
sub run_cpanp {
system("cpanp");
}
sub run_concise {
my $prog = prompt("Enter program name: ");
system("perl -MO=Concise,-tree $prog");
}
sub run_modebug {
my $prog = prompt("Enter program name: ");
system("perl -MO=Debug $prog");
}
sub run_deparse {
my $prog = prompt("Enter program name: ");
system("perl -MO=Deparse,d,l,-P,-x7 $prog");
}
sub run_namespace {
my $mod = prompt("Enter namespace to check: ");
CPAN::Shell->m($mod);
}
sub run_c {
use B::C;
my $mod = prompt("Enter module name: ");
exec("perl -MO=C,-v, $mod");
}
sub run_lex {
use B::LexInfo;
use B::ShowLex ();
my $mod = prompt("Enter package name: ");
my $lexi = B::LexInfo->new;
my $before = $lexi->stash_cvlexinfo($mod);
my $after = $lexi->stash_cvlexinfo($mod);
my $diff = $lexi->diff($before, $after);
print Dumper "$before, $after, $diff\n";
}
sub run_lint {
use B::Lint;
my $mod = prompt("Enter program name: ");
system("perl -MO=Lint,-all $mod");
}
sub run_terse_size {
use B::TerseSize;
my $mod = prompt("Enter program name: ");
system("perl -MO=TerseSize,-v $mod");
}
sub run_fathom {
use B::Fathom;
my $mod = prompt("Enter code: ");
system("perl -MO=Fathom,-v $mod");
}
sub run_xref {
use B::Xref;
my $mod = prompt("Enter file name: ");
system("perl -MO=Xref,-DtO $mod");
}
sub run_find_lib {
use Devel::CheckLib;
my $mod = prompt("Enter name of lib: ");
check_lib_or_exit( lib => [ $mod ] );
}
sub run_nytprof {
use Devel::NYTProf;
my $mod = prompt("Enter filename: ");
system("perl -d:NYTProf $mod");
system("nytprofcsv");
}
sub run_wc {
use IPC::System::Simple qw(capture);
my $mod = prompt("Enter path to file: ");
my $lines = capture("wc -clmw $mod");
print "$lines\n";
}
|