请解释perl代码的含义

时间:2013-02-17 21:10:03

标签: perl

这段代码到底在做什么,perl中s *的含义是什么,有没有其他方法来编写这段代码。

my $group = join('","', split(/,\s*/, $tmp[4]))

4 个答案:

答案 0 :(得分:7)

,\s*是一个regular expression pattern,它匹配以逗号(,)开头,后跟零个或多个(*)空格字符(\s)的字符串

split使用此模式来确定应该考虑分割的分隔符。例如,使用该模式,它会将字符串foo,bar, baz拆分为三个字符串foobarbaz

以下是Perl 5.14.2和Unicode 6.0.0考虑空格字符的内容:

  • U + 00009字符制作
  • U + 0000A LINE FEED(LF)
  • U + 0000C FORM FEED(FF)
  • U + 0000D CARRIAGE RETURN(CR)
  • U + 00020 SPACE
  • U + 00085 NEXT LINE(NEL)
  • U + 000A0 NO-BREAK SPACE
  • U + 01680 OGHAM SPACE MARK
  • U + 0180E MONGOLIAN VOWEL SEPARATOR
  • U + 02000 ZH QUAD
  • U + 02001 EM QUAD
  • U + 02002 EN SPACE
  • U + 02003 EM SPACE
  • U + 02004 THREE-PER-EM SPACE
  • U + 02005 FOUR-PER-EM SPACE
  • U + 02006 SIX-PER-EM SPACE
  • U + 02007数字空间
  • U + 02008 PUNCTUATION SPACE
  • U + 02009 THIN SPACE
  • U + 0200A HAIR SPACE
  • U + 02028 LINE SEPARATOR
  • U + 02029 PARAGRAPH SEPARATOR
  • U + 0202F NARROW NO-BREAK SPACE
  • U + 0205F MEDIUM MATHEMATICAL SPACE
  • U + 03000 IDEOGRAPHIC SPACE

答案 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)

这是您对previous question

的回答中此行的一部分
my $group = join('","',split(/,\s*/,$tmp[4]))

我认为最好写成

my $group = join ', ', map qq{"$_"}, $tmp[4] =~ /[^\s,]/g;

正则表达式会拉出所有不是空格或逗号的字符组,因此当应用于字符串TTT, TTC时,结果为TTTTTCmap在每个项目周围加上双引号。 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” 的

它需要一行逗号分隔的数据,删除空格填充,并创建一个逗号分隔的行和双引号封装。注意我在行的开头和结尾添加了双引号。