#!/usr/bin/perl -w use strict; use Test::More tests => 10; use_ok('base'); package No::Version; use vars qw($Foo); sub VERSION { 42 } package Test::Version; use base qw(No::Version); ::ok( $No::Version::VERSION =~ /set by base\.pm/, '$VERSION bug' ); # Test Inverse of $VERSION bug base.pm should not clobber existing $VERSION package Has::Version; BEGIN { $Has::Version::VERSION = '42' }; package Test::Version2; use base qw(Has::Version); ::is( $Has::Version::VERSION, 42 ); package main; my $eval1 = q{ { package Eval1; { package Eval2; use base 'Eval1'; $Eval2::VERSION = "1.02"; } $Eval1::VERSION = "1.01"; } }; eval $eval1; is( $@, '' ); is( $Eval1::VERSION, 1.01 ); is( $Eval2::VERSION, 1.02 ); eval q{use base 'reallyReAlLyNotexists'}; like( $@, qr/^Base class package "reallyReAlLyNotexists" is empty./, 'base with empty package'); eval q{use base 'reallyReAlLyNotexists'}; like( $@, qr/^Base class package "reallyReAlLyNotexists" is empty./, ' still empty on 2nd load'); BEGIN { $Has::Version_0::VERSION = 0 } package Test::Version3; use base qw(Has::Version_0); ::is( $Has::Version_0::VERSION, 0, '$VERSION==0 preserved' ); package Test::SIGDIE; { local $SIG{__DIE__} = sub { ::fail('sigdie not caught, this test should not run') }; eval { 'base'->import(qw(Huh::Boo)); }; ::like($@, qr/^Base class package "Huh::Boo" is empty/, 'Base class empty error message'); }