[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?