En perl, j'ai une chaîne qui ressemble à peu près commeComment séparer élégamment des paires de mots d'une chaîne en Perl?
my $str = "one 10 two 20 three 30";
Maintenant, je voudrais diviser cette chaîne en paires mot-nombre, mais ont sans succès.
Je pensais que je pouvais faire un
my @pairs = split /([a-z]+[^a-z]+)/, $str;
et je alors
$pairs[0] eq 'one 10 '
$pairs[1] eq 'two 20 '
$pairs[2] eq 'three 30'
Cependant, je reçois
$pairs[0] eq ' '
$pairs[1] eq 'one 10 '
$pairs[2] eq ' '
$pairs[3] eq 'two 20 '
$pairs[4] eq ' '
$pairs[5] eq 'three 30'
Maintenant, je peux utiliser grep pour mon résultat souhaité:
my @pairs = grep {$_ =~ /\S/} split /([a-z]+[^a-z]+)/, $str;
Mais je me demandais s'il y avait une solution plus élégante à ce problème.
+1 pour la solution de hachage, parlez de «hors des sentiers battus» ... – Zaid
Les hachages ne sont pas du tout emballés. Presque chaque fois que quelqu'un dit «pair», vous devriez entendre «hash» :) –
Peut-être est-il préférable d'utiliser 'split ', $ str' si vous ignorez les espaces de début et de fin. On dit aussi qu'il y a des optimisations spéciales. – codeholic