vars.pm 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. package vars;
  2. use 5.006;
  3. our $VERSION = '1.05';
  4. use warnings::register;
  5. use strict qw(vars subs);
  6. sub import {
  7. my $callpack = caller;
  8. my (undef, @imports) = @_;
  9. my ($sym, $ch);
  10. foreach (@imports) {
  11. if (($ch, $sym) = /^([\$\@\%\*\&])(.+)/) {
  12. if ($sym =~ /\W/) {
  13. # time for a more-detailed check-up
  14. if ($sym =~ /^\w+[[{].*[]}]$/) {
  15. require Carp;
  16. Carp::croak("Can't declare individual elements of hash or array");
  17. } elsif (warnings::enabled() and length($sym) == 1 and $sym !~ tr/a-zA-Z//) {
  18. warnings::warn("No need to declare built-in vars");
  19. } elsif (($^H & strict::bits('vars'))) {
  20. require Carp;
  21. Carp::croak("'$_' is not a valid variable name under strict vars");
  22. }
  23. }
  24. $sym = "${callpack}::$sym" unless $sym =~ /::/;
  25. *$sym =
  26. ( $ch eq "\$" ? \$$sym
  27. : $ch eq "\@" ? \@$sym
  28. : $ch eq "\%" ? \%$sym
  29. : $ch eq "\*" ? \*$sym
  30. : $ch eq "\&" ? \&$sym
  31. : do {
  32. require Carp;
  33. Carp::croak("'$_' is not a valid variable name");
  34. });
  35. } else {
  36. require Carp;
  37. Carp::croak("'$_' is not a valid variable name");
  38. }
  39. }
  40. };
  41. 1;
  42. __END__