Forum Programmation.perl Perl 5.14 split

Posté par (site web personnel) . Licence CC By‐SA.
Étiquettes : aucune
0
11
nov.
2013

Bonjour,

J'utilise un script (Q4Mon pour ne pas le nommer) qui fonctionnait très bien sous Squeeze (perl 5.10) et également bien avant. Sous wheezy (perl 5.14) que neni.

Après débogage c'est ce petit bout de code qui pose problème

foreach (@query_results) {
 if ($_) {
 if (split(/,,/,$_) && $_[0] eq "Q4S") {
 # Server Info
 $temp_server_address=$_[1];
 $server_address=$_[1];

if(split est toujours faux
En transformant le code comme ceci, cela refonctionne.

foreach (@query_results) {
 if ($_) {
 my @val=split(/,,/,$_);
 if ($val[0] eq "Q4S") {
 # Server Info
 $temp_server_address=$val[1];

D'où mes questions :
Y-a-t-il eu des changements majeurs dans perl 5.14 qui expliquerai pourquoi un code vieux de 10 ans ne fonctionne plus ?
Y-a-t-il une manière plus propre de faire que mon patch ? (oui parce que là, il faut que je modifie à plein d'endroit dans le code, c'est utilisé partout :))

Merci

Edit, je viens de trouver ça, ça ne me donne pas la solution mais au moins ça m'explique le comportement :
split() and @_

split() no longer modifies @_ when called in scalar or void context. In void context it now produces a "Useless use of split" warning. This was also a perl 5.12.0 change that missed the perldelta.

Edit2 : Bon j'ai trouvé la solution la plus rapide. Cpan install Classic::Perl; et use Classic::Perl :)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.