# from Ken Williams
# on Monday 12 November 2007 20:00:

>That doesn't jibe very well with the module case - otherwise we'd all
>   be setting variables like $lib::Module::Build::VERSION .

Except bin isn't in @INC and foo isn't a .pm file.

But, require("./bin/foo") allows it to be loaded (assuming the 
bin::foo::main() sort of structure.)

>In other words, 'bin' is not part of the name of the script, it's  
>just where the script lives by default.  I would rather do  
>"program_name => 'foo'" and have it look for 'foo' in script/ .

I think we still need to tell it where to look, even if we decide that's 
not part of the distro/package name.

Hmm, perldoc searches the $PATH, so technically there's already a 
namespace collision between bin/foo and lib/foo.pm, though this gets 
solved by 'man', right?

>> Would expect $bin::foo::VERSION and give you a
>> 'bin-foo-v0.0.1.tar.gz' tarball.
>
>Here too I think 'bin' shouldn't be present.  What if you decide you  
>want to offload some of the code from the 'foo' script into a module  
>in lib/?  And then expose some of the guts with APIs?  The 'bin'  
>moniker isn't really appropriate anymore.

True.  I sort of see the the applicability of bin:: as being somewhat of 
a frontend-only namespace though.  As in:  maybe it would be neat if 
bin::foo->VERSION told me something about $0, but I guess that's what 
$0 is for.  Do we just go by $main::VERSION then?  When your program 
grows-up into a module, it can use the App:: namespace or whatever.  
The guts could even be yanked into their own distro and made into a 
dependency of the script-only distro (of course, just `mkdir lib` and 
shipping with it would be fine too.)

I think we should be talking about keeping 'bin/' or 'sbin/' 
or 'cgi-bin/' in the name in terms of possibly a META.yml field (which 
would potentially solve the downstream packager issue that Adam 
mentions.)

  program_name: bin/foo

I guess it would become the debian package 'foo' (because they need to 
address the namespace collision at the $PATH level.)

There is still a catch to addressability and namespace collision on CPAN 
though.  Because the index has nothing for scripts, I was thinking that 
a "bin-foo" distro would hack that without interfering with any 
pragmas.  Unfortunately, I seem to be mistaken.  See bin::sqlpp, where 
a .pm file has been included apparently just to trick pause.  So, 
should we try to address this in pause, the indices, CPAN(PLUS).pm, or 
just create a dummy .pm file?

--Eric
-- 
software:  a hypothetical exercise which happens to compile.
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------

Reply via email to