gilou Modérateur Modzilla | Citation :
est-ce impossible d'ajouter une variable après le % ?
|
Oui et non: Ce qui bloque dans ton code, c'est le
my ($val1, $val2, %valx, $newval)
Parce que ça, ça essaie de prendre 2 par 2 tout ce qui reste pour en faire un hash.
Code :
#!/usr/local/bin/perl use strict; use warnings; sub mafonction($$%$) { my ($val1, $val2, $valx, $newval) = @_; foreach (keys(% {$valx})) { print "key: $_, value: ${$valx}{$_}\n"; } } my $var1 = 1; my $var2 = 2; my $newval = 3; mafonction $var1, $var2, {'PRTR' => "DEBUT", 'PRTR1' => "FIN"}, $newval;
|
Ça marche, mais ça génère aussi des warnings (sub mafonction($$$$) n'en générera pas).
Noter qu'on passe un "anonymous array", comme il est d'usage dans les appels de fonctions en perl.
La logique du système, c'est qu'en principe, un @ ou un % ne peuvent figurer qu'en dernière position, car en principe, ils "mangent" les arguments (bon, dans la pratique, ce ne semble plus vraiment être la cas, au vu de ce que j'ai posté avec un warning).
La documentation est loin d'être claire sur le sujet (emploi de + par exemple), et ça fait partie des zones de perl qui gagneraient a avoir un bon tutorial.
Mais bon, le terme prototype en Perl est très trompeur: ce n'est pas vraiment une vérification de prototype mais plutôt une manière de forcer 1) le nombre d'arguments et 2) l'interprétation (scalaire, liste...) des arguments rencontrés.
Pour un des rares cas d'emplois utile des prototypes en Perl, cf http://www.perlmonks.org/?node_id=406231
Il vaut mieux aller voir du côté du module Params::Validate par exemple, pour une vérification (éventuellement poussée) du type des paramêtres passés à une fonction, si on en a besoin.
A+, ---------------
There's more than what can be linked! -- Iyashikei Anime Forever! -- AngularJS c'est un framework d'engulé! --
|