Voici ce que je voudrais obtenir:Comment pourrais-je redéfinir un sous-programme et conserver l'ancien aussi?
sub first {
print "this is original first";
}
*original_first = \&first;
sub first {
print "this is first redefined";
}
original_first(); # i expect this to print "this is original first"
first() # i expect this to print "this is first redefined"
Je pensais qu'en sauvant le symbole de first
, je serais en mesure d'appeler plus tard, le sous-programme d'origine (sous le nom original_first
) et d'être également en mesure appeler first
, et obtenir celui redéfini. Cependant, si j'appelle le original_first
, je reçois toujours le "ceci est d'abord redéfini". Que dois-je faire pour que cela fonctionne?
Est-il possible, lorsque vous redéfinissez le symbole «first», d'affecter uniquement la partie code? – Geo
une affectation d'un coderef (généré par sub {...}) à un typeglob ne remplacera que l'entrée CODE dans le glob. tout autre type de données dans le glob ne changera pas –
Vous pouvez également utiliser 'local * first = sub {...};' pour remplacer la fonction dans un bloc spécifique seulement. –