这段代码到底在做什么,perl中s *的含义是什么,有没有其他方法来编写这段代码。
my $group = join('","', split(/,\s*/, $tmp[4]))
答案 0 :(得分:7)
,\s*
是一个regular expression pattern,它匹配以逗号(,
)开头,后跟零个或多个(*
)空格字符(\s
)的字符串
split
使用此模式来确定应该考虑分割的分隔符。例如,使用该模式,它会将字符串foo,bar, baz
拆分为三个字符串foo
,bar
和baz
。
以下是Perl 5.14.2和Unicode 6.0.0考虑空格字符的内容:
答案 1 :(得分:1)
假设您的代码在可编译时看起来像:
my $test = "abc, xyz, mno";
print join('","', split(/,\s*/, $test));
可以重写为:
my $test = "abc, xyz, mno";
my @tokens = split /,\s*/, $test; # split $test on `,\s*`
print join '","', @tokens; # Join the array back on `","`.
@ regex
的含义已经由@ikegami解释了。
请记住,您可以在omit
括号中更改Perl中的含义。
答案 2 :(得分:1)
my $group = join('","',split(/,\s*/,$tmp[4]))
我认为最好写成
my $group = join ', ', map qq{"$_"}, $tmp[4] =~ /[^\s,]/g;
正则表达式会拉出所有不是空格或逗号的字符组,因此当应用于字符串TTT, TTC
时,结果为TTT
和TTC
。 map
在每个项目周围加上双引号。 join
将它们全部连接成一个字符串,以,
分隔。这给出了"TTT", "TTC"
您是否阅读了我之前两个问题的答案?唯一的问题似乎是你不想安装模块,我已经为这种情况编写了一个替代方案。
答案 3 :(得分:0)
我同意Rohl Jain的看法。它是一个代码片段。我提出了案例。
my $line = 'a,b, c, d,e';
my $newline = '"'.join('","',split(/,\s*/,$line)).'"';
print $newline;
这是输出。 “一”, “B”, “C”, “d”, “e” 的
它需要一行逗号分隔的数据,删除空格填充,并创建一个逗号分隔的行和双引号封装。注意我在行的开头和结尾添加了双引号。