Funktionsnamensauflösung gefixt
authorMoritz Bunkus <m.bunkus@linet-services.de>
Mon, 1 Feb 2010 13:54:54 +0000 (14:54 +0100)
committerSven Schöling <s.schoeling@linet-services.de>
Tue, 20 Jul 2010 11:23:43 +0000 (13:23 +0200)
Hintergrund. "my $abc = ... if ..." bewirkt, dass zuerst das "if"
ausgeführt wird. Schlägt das "if" fehl, so wird die Zuweisung nicht
ausgeführt. Somit bleibt der Wert in $abc vom vorherigen Aufruf
derselben Funktion erhalten.

I hate Perl.

SL/Locale.pm

index 28b13c6..9e74902 100644 (file)
@@ -239,8 +239,9 @@ sub findsub {
     }
   }
 
-  my $sub_name   = first { defined &{ "::$_" } } @{ $self->{texts_reverse}->{$text_rev} } if $self->{texts_reverse}->{$text_rev};
-  $sub_name    ||= $text_rev if ($text_rev =~ m/^[a-z][a-z0-9_]+$/) && defined &{ "::$text_rev" };
+  my $sub_name;
+  $sub_name   = first { defined(&{ "::${_}" }) } @{ $self->{texts_reverse}->{$text_rev} } if $self->{texts_reverse}->{$text_rev};
+  $sub_name ||= $text_rev if ($text_rev =~ m/^[a-z][a-z0-9_]+$/) && defined &{ "::${text_rev}" };
 
   $main::form->error("$text not defined in locale/$self->{countrycode}/all") if !$sub_name;