2009-06-29 6 views
1

J'ai essayé de supprimer tous les sauts de ligne (\n) à partir des valeurs d'un hachage:Comment puis-je supprimer toutes les nouvelles lignes des valeurs de hachage?

my %var_h = ( "ID" => " This is Test 
          This is new line TEST 


          newline Test end "); 

Comment puis-je supprimer toutes les nouvelles lignes des valeurs de %var_h?

J'ai essayé s/\\n//g mais je n'ai pas réussi à le faire fonctionner.

+1

Je vois maintenant que votre problème était que vous étiez en train d'échapper '\ n' quand vous ne vouliez pas l'être. (Sauf s'il s'agit d'une faute de frappe dans la question.) – Telemachus

Répondre

13
s:\n::g for values %var_h; 

devrait faire l'affaire.

+0

+1 parce que les modificateurs de déclaration existent pour une raison ;-) –

+0

Je suis absolument choqué que cela fonctionne (en ce que les valeurs ne copient pas) mais je viens de le tester avec un exemple plus simple. –

+0

@Unknown Google: oui, les valeurs ne les copient pas et pour leur alias. les clés ne copie, cependant. – ysth

4

À quoi faites-vous la substitution? Vous semblez vouloir fixer seulement les valeurs, donc j'utiliser le mot-clé values:

for my $value (values %var_h) { 
    $value =~ s/\n//g; 
} 

Une alternative (à la demande OP) serait d'utiliser la carte et une tranche bien que je trouve beaucoup moins clair:

@var_h{keys %var_h} = map { s/\n//g } values %var_h; 
+0

Avec la valeur de hachage .. – joe

+0

est-il un autre moyen de faire cela – joe

+0

J'ai ajouté une deuxième méthode. Mais voulez-vous une méthode sans utiliser 'values'? – Telemachus

3

Toutes les autres solutions suppriment \ n de toutes les valeurs de hachage.

Je ne suis pas sûr si cela est nécessaire.

Donc, pour ne supprimer que de cette seule valeur que vous avez:

$var_h{'ID'} =~ s/\r?\n//g; 

Techniquement s/\ n // g de devrait être suffisant, mais j'ai l'habitude d'ajouter \ r? avant cela, il va également gérer les nouvelles lignes de style Windows.

+0

C'est un bon point. Je supposais que la valeur unique n'était qu'un exemple et qu'il ne savait peut-être pas à l'avance quelles valeurs avaient ou non des nouvelles lignes non désirées. – Telemachus

+0

Comment les personnages supplémentaires peuvent-ils entrer? –

+1

Elfes? Je n'ai pas beaucoup réfléchi à comment les nouvelles lignes sont arrivées. Du haut de ma tête: une mauvaise entrée de l'utilisateur, une capture d'expression régulière qui a mal tourné, de l'embarras et une erreur de programmation. – Telemachus

Questions connexes