我正在尝试使用Perl中的map
函数用字母C
替换字符串数组的一部分,但我无法弄清楚这样做的正则表达式。 (我必须使用map
,没有选项不使用它。)Perl为数组的每个部分返回1
而不是正确的字符串,但使用C
而不是数字。
基本上,我在Perl中有以下数组,我需要将数值更改为C
。我需要使用map
这样做,而且我不确定如何去做。我尝试@GradeC = map(s/7[2-9]/C/, @GradeC);
,因为我的Google-fu表明可能是如何使用正则表达式查找/替换,但这不起作用。完全披露:这是作业,但我可以使用Stack Overflow寻求帮助。
@GradeC = ("Name: Shemp Grade: 79",
"Name: Curly Grade: 75",
"Name: Larry Grade: 72");
# map statement
print join("\n", @GradeC);
答案 0 :(得分:3)
如果您想编辑现有结构,请使用for。
for (@GradeC) {
s/7[2-9]/C/;
}
如果你真的想要一个新数组,那么不要忘记在替换后返回你的值。此外,正如ikegami指出的那样,你不想直接在$_
上执行,因为它会编辑原始数组,所以改为使用临时变量。
my @newGrades = map { my $g = $_; $g =~ s/7[2-9]/C/; $g } @GradeC;
答案 1 :(得分:3)
use strict;
。use warnings;
use feature qw(say);
时,您可以使用say
声明。 Map获取数组中的元素,将每个元素设置为$_
,然后对其运行命令。它还使用数组中的实际值别名 $_
的每个瞬间,因此您无需执行任何操作。
我正在使用s/7\d/C/
替换7的每个瞬间,后跟一个带字母C的数字。
#! /usr/bin/env perl
#
use warnings;
use strict;
use feature qw(say);
my @grade_c = (
"Name: Shemp Grade: 79",
"Name: Curly Grade: 75",
"Name: Larry Grade: 72"
);
map { s/7\d/C/ } @grade_c;
say join "\n", @grade_c;
运行:
Name: Shemp Grade: C
Name: Curly Grade: C
Name: Larry Grade: C
答案 2 :(得分:1)
此“允许使用任何和所有可用资源”业务是荒谬的。
此
use strict;
use warnings;
my @grade_c = (
'Name: Shemp Grade: 79',
'Name: Curly Grade: 75',
'Name: Larry Grade: 72',
);
print "$_\n" for map s/grade\s*:\s*\K\d+/C/r, @grade_c;
<强>输出强>
Name: Shemp Grade: C
Name: Curly Grade: C
Name: Larry Grade: C
我相信你什么都没学到。