2017-08-31 22 views
0


我想在地圖函數中使用Perl中遞增的索引。我的代碼是:如何在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; 

此輸出:

×(1 ++):= 46.15;
x(1 ++):= 18.59;
x(1 ++):= 47.45;
x(1 ++):= 21.14;

取而代之的是X(1 +),我想X(1),x(2)等
我怎麼能達到呢?

回答

5

您的問題無關map。您將Perl代碼放入字符串文字中,並希望它能夠執行。

更換

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

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

而且,你缺少一個結尾的新行。修正:

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

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

看來,認爲連接是答案:

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

這是_an_答案。但是如果你想要所有的行都有'\ n',然後將它附加到'map'表達式中的每個字符串,'map ...「):= $ _; \ n」'並使用'join'''。這樣最後一個沒有'\ n'。或者'print $ str',\ n「'當然('say'爲你做了什麼) – zdim

6

而非陣列映射的,你可以映射你的數量,而不是需要一個獨立的變量:

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

或者,包括換行符:

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