我想在map函数中使用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;
输出:
x(1 ++):= 46.15;
x(1 ++):= 18.59;
x(1 ++):= 47.45;
x(1 ++):= 21.14;
而不是x(1 ++),我想要x(1),x(2)等。
我怎样才能达到它?
答案 0 :(得分:6)
您可以映射您的计数,而不是映射数组,而不需要单独的变量:
my $str = join("\n", map "x($_) := $a[$_-1];", 1..@a);
或者,要包含一个尾随换行符:
my $str = join('', map "x($_) := $a[$_-1];\n", 1..@a);
答案 1 :(得分: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;
答案 2 :(得分:0)
看来,连接就是答案:
my $str = join("\n", map "x(".$c++.") := $_;", @a);