use strict;
use warnings;
+use Carp qw/croak/;
use Symbol qw/gensym/;
use Variable::Magic qw/wizard cast dispell getdata/;
=cut
BEGIN {
- if (!Variable::Magic::VMG_UVAR) {
- require Carp;
- Carp::croak('uvar magic not available');
- }
+ croak 'uvar magic not available' unless Variable::Magic::VMG_UVAR;
}
my @core = qw/abs accept alarm atan2 bind binmode bless break caller chdir
my %pkgs;
sub import {
- my $pkg = caller 1;
+ shift;
+ croak 'Optional arguments must be passed as keys/values pairs' if @_ % 2;
+ my %args = @_;
+ my $cur = (caller 1)[0];
+ my $pkg;
+ if ($pkg = $args{in}) {
+ croak 'Invalid package name' if ref $pkg
+ or $pkg =~ /(?:-|[^\w:])/
+ or $pkg =~ /(?:\A\d|\b:(?::\d|(?:::+)?\b))/;
+ $pkg =~ s/::$//;
+ $pkg = $cur . $pkg if $pkg eq '' or $pkg =~ /^::/;
+ } else {
+ $pkg = $cur;
+ }
$^H{bareword} = 1;
++$pkgs{$pkg};
no strict 'refs';