J'ai récemment commencé à apprendre Perl et j'ai une question à laquelle je ne trouve pas de réponse claire sur Internet. dis que j'ai quelque chose comme ça,
@arr = (1, 2, 3);
$scal = "@arr"
# $scal is now 123.
L'utilisation de guillemets est-elle le seul moyen d'aplatir le tableau afin que chaque élément soit stocké dans la valeur scalaire? Cela semble improbable, mais je n'ai trouvé aucune autre façon de procéder. Merci d'avance.
La fonction join
est couramment utilisée pour "aplatir" les listes. Vous permet de spécifier ce que vous voulez entre chaque élément de la chaîne résultante.
$scal = join(",", @arr);
# $scal is no "1,2,3"
Dans votre exemple, vous interpolez un tableau dans une chaîne entre guillemets doubles. Ce qui se passe dans ces circonstances est contrôlé par la variable $"
De Perl. De perldoc perlvar :
$ LIST_SEPARATOR
$ "
Lorsqu'un tableau ou une tranche de tableau est interpolé dans une chaîne entre guillemets doubles ou dans un contexte similaire tel que /.../, ses éléments sont séparés par cette valeur. La valeur par défaut est un espace. Par exemple, ceci:
print "The array is: @array\n";
est équivalent à ceci:
print "The array is: " . join($", @array) . "\n";
Mnémonique: fonctionne dans un contexte entre guillemets.
La valeur par défaut de $"
Est un espace. Vous pouvez évidemment changer la valeur de $"
.
{
local $" = ':',
my @arr = (1, 2, 3);
my $scalar = "@arr"; # $scalar contains '1:2:3'
}
Comme pour toutes les variables spéciales de Perl, il est toujours préférable de localiser toutes les modifications dans un bloc de code.
dans l'esprit de TIMTOWTDI:
my $scal;
$scal .= $_ foreach @arr;
Vous pouvez également utiliser join
sans séparateur
my $scalar = join( '' , @array ) ;
Il y a plus d'une façon de le faire.