[This seems like a good time to post something that's been on my mind for
some time.]

SUMMARY

The world needs a really easy CPAN client.  Here's one design for such a
thing.

DETAILS

A few brief philosphical points:

  1) People like languages that have tons of built-in
      doohickeys. See PHP and Java.

  2) Instead of a huge standard library, a really easy to use CPAN
      client allows programmers to have the world of modules almost
      as easily as built-in, and with the advantage of up-to-date-ness
      and quantity.

  3) The current CPAN.pm isn't really easy to use. Now matter how
      simple it may seem to the Perl Guru community, inexperienced
      users find it intimidating to download CPAN modules.
      Remember: beginners end up ruling the world.  See Microsoft.

Solution: a simple program that is called from the command line.  Here's a
brief tour:

Download and install a module from CPAN. Loading a module also automatically
loads its dependencies.

   cpan load Date::EzDate

The command above would ask the user if they want to install using the
current directory as the root of library tree, and is also mentions that if
they want to specify another dir they can use this command:

   cpan --lib ~/lib load Date::EzDate

Update a module.

   cpan update Date::EzDate

Don't download dependencies:

   cpan --dep 0 load Date::EzDate

Update all currently installed modules:

   cpan update *

Update a namespace:

   cpan update Date::*

Get help on using cpan:

   cpan help

No configuration files (.e.g .cpan) are necessary.  However, you can use a
configuration file if you want tp indicate a .cpan-like file

   cpan --conf ~/.cpan load Date::EzDate

Get from a particular FTP server

   cpan --server cpan.idocs.com load Date::EzDate

By default, progress messages are kept to a minimum.  No more of those
hundreds of lines of bewildering make messages.

   cpan --lib ~/perllib load Date::EzDate
   finding server
   downloading module
   determining dependencies
   downloading dependencies
   installing
   done

Optional verbose mode
   cpan --verbose load Date::EzDate
   (hundreds of lines of lovely make messages)

Request particular operating system compilation (e.g. Win32)
(usually not needed explicitly because cpan.pl will know which compilation
to ask for)

   cpan --compile win32 load Date::EzDate

Indicate latest development vs. latest stable

   cpan --latest beta load Date::EzDate

Remove a module
   cpan remove Date::EzDate


-----------------------------
Other Misc CPAN Ideas

- Authors don't need to indicate dependencies.  CPAN figures it out from the
use's and require's.  CPAN will not accept modules that depend on other
modules that aren't on CPAN.  (Yes, there might be a chicken and egg problem
there, I'm sure we can find a solution.) This leads me to...

- Run-time dependencies: Dependencies can be indicated explicitly with
something like this:

 use Dependency Date::Language::French;

- CPAN conformity: All modules served from CPAN must meet certain
specifications.  They must include a version, POD, license statement, and
probably other meta-info.  The meta-info would be standardized so that the
system could tell that the module conforms.

- Automated load balancing: cpan.perl.org doesn't have to pay for the
bandwidth of the whole world. cpan.pl should recognize a command from
CPAN.org to redirect to another server.

- 6pan.org: The domain name 6pan.org is available as of this writing. Larry,
are you planning on saying "6PAN" enough to merit somebody registering
6pan.org?


Reply via email to