首页 > 解决方案 > Perl 去掉引号和空格

问题描述

我正在尝试将信息从文件推送到数组。我有看起来像这样的文件:

1.2.3.4      =>  '"Something"'
5.6.7.8      =>  '"One more time"'

所以分隔符是"=>". 所以我尝试将信息从文件推送到数组,如下所示:

my $filename = '/root/file';
open(my $filehandle, '<', $filename) or die "Could not open $filename\n";
my @resultarray;
while(my $line = <$filehandle>){
    chomp $line;
    my @linearray = split("=>", $line);
    push(@resultarray, @linearray);
}

然后我尝试删除空格和引号:

my @stripArray = grep(s/\s*$//g, @resultarray);
my @stripArray = grep(s/([^"]*)//, @stripArray);
print Dumper(@stripArray);

但我得到的只是:

$VAR1 = '';
$VAR2 = '"Something"';
$VAR3 = '';
$VAR4 = '"One more time"';

所以数字不见了,引号仍然存在......试图解决这个谜题大约 3 小时,所以认为是时候寻求帮助了。

标签: arraysregexperl

解决方案


grep仅返回表达式为其返回 true 的列表元素。s///如果没有可替换的内容,则返回 false,因此不会从grep.

不要grep用于更改列表的元素。这就是map

@stripArray = map s/\s+$//r, @resultarray;

您还可以在分隔符中包含空格,这样您以后就不必删除空格:

my @linearray = split /\s*=>\s*/, $line;

推荐阅读