如何在Perl的map函数中使用递增的索引?

lmo*_*csi 0 indexing perl dictionary increment


我想在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;
Run Code Online (Sandbox Code Playgroud)

这输出:

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

而不是x(1 ++),我想要x(1),x(2)等.
我怎样才能达到它?

yst*_*sth 6

您可以映射计数,而不是映射数组,而不需要单独的变量:

my $str = join("\n", map "x($_) := $a[$_-1];", 1..@a);
Run Code Online (Sandbox Code Playgroud)

或者,包含尾随换行符:

my $str = join('', map "x($_) := $a[$_-1];\n", 1..@a);
Run Code Online (Sandbox Code Playgroud)


ike*_*ami 5

你的问题与此无关map.您将Perl代码放在字符串文字中,并希望它会被执行.

更换

map "x($c++) := $_;",
Run Code Online (Sandbox Code Playgroud)

map { ++$c; "x($c) := $_;" }
Run Code Online (Sandbox Code Playgroud)

此外,您缺少一个尾随换行符.固定:

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

要么

print map { ++$c; "x($c) := $_;\n" } @a;
Run Code Online (Sandbox Code Playgroud)