2010-05-30 6 views
2

J'essaie de comprendre le système de référence/déréférencement de Perl.Perl: Dans splice(), le type de arg1 doit être un tableau, ne peut pas être un déréférencement scalaire. Comment réparer?

Ce que je suis en train de faire est de supprimer un élément en utilisant la référence:

my $ref= \@{$collection{$_[0]}}; 
# delete($$ref[$i]); # delete works, I've tested that already 
splice($$ref, $i, 1); # this wouldn't do. 

J'ai d'abord essayé le sous-programme de suppression(), cela fonctionne; cependant, il ne décale pas l'index après les éléments supprimés de 1, donc je ne peux pas continuer à travailler sur d'autres choses. J'ai ensuite recherché sur Google et trouvé le sous-programme splice() qui supprime et décale en une seule fois.

Mais les commentaires d'erreur me dit que

"Type de arg 1 à épissure doit être array (pas de déréférencement scalaire) ..."

J'ai ensuite essayé quelque chose comme ceci:

splice(@{$$ref}, $i, 1); 

cela a donné lieu à une autre erreur comme ceci:

« Pas une référence SCALAIRE à ... (montrant cette ligne) »

Donc, je suis un peu perplexe, comment pourrais-je gérer ce problème?

Je préfère ne pas utiliser de CPAN ou de bibliothèque supplémentaire pour la solution, si possible.

Répondre

2
splice(@$ref, $i, 1); # this works... 

Ahhh ... J'ai rencontré cette question hier soir (2 heures) si mon énergie a été brûlé ...

Maintenant je vois la magie en Perl un peu plus clairement :)

Désolé pour une question aussi simple.

+1

'@ {$ ref}' aurait aussi fonctionné. '@ $ ref' est plus commun, mais si vous avez une expression plus complexe (au lieu d'une seule variable), vous avez besoin des accolades. – cjm

+0

Oui, voir http://perlmonks.org/?node=References+quick+reference – ysth

Questions connexes