pracuję nad aktualizacją niektóre bardzo starego kodu Perl (nie mój kod) i natknąłem się na następujący w podprogramie:Co robi gwiazdka Sigil Perl zrobić
sub DoEvent {
local(*eventWEH, $foreachFunc, @args) = @_;
$ret = do $foreachFunc(*eventWEH, @args);
}
To wydawało się działać prawidłowo w Perl 5.6 0,1, ale już nie pracuje w Perl 5.22, co daje błąd składni po prostu zrób $ foreachFun (
Co jest celem gwiazdką przed zmiennej * eventWEH?
Gdyby to było „C” Sugerowałbym jakiś wskaźnik. Jakieś sugestie?
ETA: Ten sub zostaje wywołany z wieloma różnymi typami dla pierwszego parametru. Na przykład:
&DoEvent($abc, "DoAbc", @args);
i
&DoEvent(@xyz, "DoXyz", @args);
Tak jak za podane odpowiedzi, wygląda na to, * eventWEH może przybrać inny typ danych, aby dopasować cokolwiek parametr jest przekazywany do sub.
Czy jesteś pewien, że to nie są '& DoEvent (\ $ abc," DoXyz ", @args)' i '& DoEvent (\ @ xyz," DoXyz ", @args)'? To, co napisałeś, nie ma większego sensu. – ikegami