- Fixed a dispatcher bug, thanks nothingmuch
[catagits/Catalyst-Runtime.git] / lib / Catalyst / Dispatcher.pm
index 745f84f..490f549 100644 (file)
@@ -117,9 +117,10 @@ sub forward {
 
     unless ($result) {
 
-        my $comp;
+        my $class  = ref($command) || ref($c->component($command));
+        my $method = shift || 'process';
 
-        unless ( $comp = (ref $command ? $command : $c->component($command)) ) {
+        unless ( $class ) {
             my $error =
 qq/Couldn't forward to command "$command". Invalid action or component./;
             $c->error($error);
@@ -127,9 +128,6 @@ qq/Couldn't forward to command "$command". Invalid action or component./;
             return 0;
         }
 
-        my $class  = ref $comp;
-        my $method = shift || 'process';
-
         if ( my $code = $class->can($method) ) {
             my $action = $self->method_action_class->new(
                 {
@@ -260,11 +258,11 @@ sub get_containers {
         # should catch any failures - or short-circuit this if this *is* a
         # bug in the visitor and gets fixed.
 
-        my $extra = $path[ ( scalar @match ) - 1 ];
-        last unless $extra;
-        $visitor->setSearchPath($extra);
-        $match[-1]->accept($visitor);
-        push( @match, $visitor->getResult ) if defined $visitor->getResult;
+        if (my $extra = $path[ ( scalar @match ) - 1 ]) {
+            $visitor->setSearchPath($extra);
+            $match[-1]->accept($visitor);
+            push( @match, $visitor->getResult ) if defined $visitor->getResult;
+        }
     }
 
     return map { $_->getNodeValue } @match;