需要根据用户从不是数组的变量指定的位置来获取单个字段值

时间:2013-10-23 06:23:49

标签: perl

我需要根据数字从一行中获取字段,其中字段由空格分隔。现在的问题是这些字段本身可能包含空格,但它们只有一个引号。

即:

$var="1 'abc def' 234 '' '456' 77 'ghi jkl mno p ' 99 ' q ' 88 ' r'";

当用户想要位置1的元素时,如何获取abc def

2 个答案:

答案 0 :(得分:5)

检查Text::ParseWords核心模块,

use Text::ParseWords;
my $var = "1 'abc def' 234 '' '456' 77 'ghi jkl mno p ' 99 ' q ' 88 ' r'";
my @words = quotewords('\s+', 0, $var);

# use Data::Dumper; print Dumper \@words;
my $position = 1;
print $words[$position]; # 'abc def'

答案 1 :(得分:1)

我的(未经测试的)方法是

use Data::Dumper;

my $var="1 'abc def' 234 '' '456' 77 'ghi jkl mno p ' 99 ' q ' 88 ' r'";

my @data = split("\s",$var);
my @result;

foreach my $substr (@data) {
    s/[\"|\']//g;
    push(@result,$_) unless $_ eq "";
}

print Dumper @data;

会返回类似这样的内容

@data = [
    "1",
    "abc def",
    "234",
    ...
];

现在您可以通过

访问每个对象
$data[index];