Changeset 8683 for lang/perl/Class-Component/trunk/lib/Class/Component.pm
- Timestamp:
- 04/03/08 00:14:10 (5 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
lang/perl/Class-Component/trunk/lib/Class/Component.pm
r8659 r8683 104 104 my $pkg; 105 105 if (($pkg = $component) =~ s/^\+// || ($pkg = $c->class_component_load_component_resolver($component))) { 106 if (Class::Inspector->installed($pkg)) { 107 $pkg->require or croak $@; 108 } else { 109 croak "$pkg is not installed"; 110 } 106 $pkg->require or croak $@; 111 107 } else { 112 for my $isa_pkg (@{ $class->isa_list_cache($c) }) { 113 my $comp = "$isa_pkg\::Component::$component"; 114 next unless Class::Inspector->installed($comp); 115 $comp->require or croak $@; 116 $pkg = $comp; 117 last; 118 } 119 croak "$component is not installed" unless $pkg; 108 unless ($pkg = $class->pkg_require($c => "Component::$component")) { 109 $@ and croak $@; 110 croak "$component is not installed"; 111 } 120 112 } 121 113 … … 178 170 $pkg->require or croak $@; 179 171 } else { 180 for my $isa_pkg (@{ $class->isa_list_cache($class->_class($c)) }) { 181 my $comp = "$isa_pkg\::Plugin::$plugin"; 182 next unless Class::Inspector->installed($comp); 183 $comp->require or croak $@; 184 $pkg = $comp; 185 last; 186 } 187 croak "$plugin is not installed" unless $pkg; 172 unless ($pkg = $class->pkg_require($c => "Plugin::$plugin")) { 173 $@ and croak $@; 174 croak "$plugin is not installed"; 175 } 188 176 } 189 177 … … 388 376 my($class, $c) = @_; 389 377 ref($c) || $c; 378 } 379 380 my %pkg_require_cache = (); 381 sub pkg_require_cache_clear { %pkg_require_cache = () } 382 my $ins = 0; 383 sub _pkg_require { 384 my($class, $pkg) = @_; 385 386 if (exists $pkg_require_cache{$pkg}) { 387 return $pkg_require_cache{$pkg} ? $pkg : undef; 388 } 389 $pkg_require_cache{$pkg} = 0; 390 391 return unless Class::Inspector->installed($pkg); 392 $pkg->require or return; 393 $pkg_require_cache{$pkg} = 1; 394 395 return $pkg; 396 } 397 sub pkg_require { 398 my($class, $c, $pkg) = @_; 399 400 my $pkg2; 401 if (($pkg2 = $pkg) =~ s/^\+//) { 402 return $class->_pkg_require($pkg2); 403 } 404 for my $isa_pkg (@{ $class->isa_list_cache($c) }) { 405 my $ret = $class->_pkg_require("$isa_pkg\::$pkg"); 406 return $ret if $ret; 407 return if $@; 408 } 390 409 } 391 410
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)