# from John Peacock
# on Sunday 28 January 2007 11:56 am:

>John Peacock wrote:
>>>   use version $VERSION = qw$Revision: 1.2$[1];
>>>
>>> What's different about cvs versions?
>
>Oh, I just remembered what the difference is: CVS versions need to go
> through qv() (or equivalent code) because they are incremented as
> subversions, not as floating point numbers (so 1.10 follows 1.9).  So
> I *do* need to have a list context on the right so I can tell those
> cases apart.

True, though there seems to be quite a bit of sprintf and such already.  

  use version $VERSION = 'v' . (qw$Revision 1.2$)[1];

I suppose the => syntax still matches the regexp in ExtUtils::MM_Unix, 
though the way it does the eval causes VERSION to turn out as undef due 
to compile/run-time distinctions.  M::B::ModuleInfo appears to have the 
same issue.

One possible solution for that may be:

  my $sub;
  my $eval = qq{BEGIN { q#  Hide from _packages_inside()
                 #; package Module::Build::ModuleInfo::_version;
                 no strict;

                 local $sigil$var;
                 \$$var=undef;
                   \$sub = sub {$line; \$$var}
                }};

  local $^W;
  # Try and get the $VERSION
  warn "compile $eval";
  my $result = eval $eval;
  warn "Error evaling version line '$eval' in $self->{filename}: [EMAIL 
PROTECTED]"
    if $@;
  (ref($sub) eq 'CODE') or die;
  $result = $sub->();
  warn "yay $result\n";

Though I have to admit I'm not sure what the local is trying to do (or 
rather, why we also then need the undef.)  I've tested it with these.

  use foo $VERSION=1.2.0;
  use foo $VERSION='v' . (qw$Revision: 1.2$)[1];
  use foo our $VERSION=1.2.0;
  use foo $bar::VERSION=1.2.0;

--Eric
-- 
Peer's Law: The solution to the problem changes the problem.
---------------------------------------------------
    http://scratchcomputing.com
---------------------------------------------------

Reply via email to