2017-08-31 1 views
0


Je voudrais utiliser un index incrémenté dans Perl, dans la fonction de carte. Le code j'ai est:Comment utiliser un index incrémenté dans la fonction de carte de Perl?

use strict; 

my $ord = "46.15,18.59,47.45,21.14"; 
my $c = 1; 

my @a = split(",",$ord); 
my $str = join("\n", map "x($c++) := $_;", @a); 
print $str; 

Ce sorties:

x (1): ++ = 46,15;
x (1 ++): = 18,59;
x (1 ++): = 47,45;
x (1 ++): = 21,14;

au lieu des x (1 ++), je voudrais x (1), x (2), etc.
Comment puis-je atteindre?

Répondre

5

Votre problème n'a rien à voir avec map. Vous avez placé le code Perl dans un littéral de chaîne et espéré qu'il serait exécuté.

Remplacer

map "x($c++) := $_;", 

avec

map { ++$c; "x($c) := $_;" } 

, vous manque également un saut de ligne final. Correction:

my $str = join "", map { ++$c; "x($c) := $_;\n" } @a; 
print $str; 

ou

print map { ++$c; "x($c) := $_;\n" } @a; 
0

Il semble que la réponse est concaténer:

my $str = join("\n", map "x(".$c++.") := $_;", @a); 
+0

Il s'agit d'une réponse. Mais si vous voulez que toutes les lignes aient '\ n', ajoutez-les à chaque chaîne de l'expression' map', 'map ..."): = $ _; \ n "' et utilisez 'join ''. De cette façon, le dernier n'a pas de \ n. Ou 'print $ str," \ n "' bien sûr (ce que 'dit' fait pour vous) – zdim

6

lieu de cartographier le tableau, vous pouvez mapper votre compteur, et pas besoin d'une variable séparée:

my $str = join("\n", map "x($_) := $a[$_-1];", [email protected]); 

Ou, pour inclure une nouvelle ligne de fuite :

my $str = join('', map "x($_) := $a[$_-1];\n", [email protected]);