Arrays Perl去掉引号和空格

Arrays Perl去掉引号和空格,arrays,regex,perl,Arrays,Regex,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 = <$file

我正在尝试将信息从文件推送到数组。 我的文件如下所示:

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);
}
因此,分隔符是
“=>”
。因此,我尝试将信息从文件推送到数组,如下所示:

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);
}
但我得到的只是:

$VAR1 = '';
$VAR2 = '"Something"';
$VAR3 = '';
$VAR4 = '"One more time"';
所以数字不见了,引号还在那里。。。。。尝试解答这个谜题大约3个小时,所以认为是时候寻求帮助了。

只返回表达式返回true的列表元素<如果没有可替换的内容,code>s//将返回false,因此不会从
grep
返回数字

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

@stripArray = map s/\s+$//r, @resultarray;
您还可以在分隔符中包含空格,以便以后不必删除空格:

my @linearray = split /\s*=>\s*/, $line;
仅返回表达式为其返回true的列表元素<如果没有可替换的内容,code>s//将返回false,因此不会从
grep
返回数字

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

@stripArray = map s/\s+$//r, @resultarray;
您还可以在分隔符中包含空格,以便以后不必删除空格:

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

输入数据很容易用正则表达式处理,提取感兴趣的信息并将其放入数组

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my @array;

while(<DATA>) {
    my @data = /(\S+)\s+=>\s+"(.*?)"/;
    push @array, \@data;
}

say Dumper(\@array);

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

输入数据很容易用正则表达式处理,提取感兴趣的信息并将其放入数组

use strict;
use warnings;
use feature 'say';

use Data::Dumper;

my @array;

while(<DATA>) {
    my @data = /(\S+)\s+=>\s+"(.*?)"/;
    push @array, \@data;
}

say Dumper(\@array);

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

stip
strip
是两个不同的名称。
stip
strip
是两个不同的名称。因此,它对空格和数字有帮助,但引号仍然存在<代码>我的@stripArray=map s/^'([^']*)'$/$1/,@resultarray我试图像这样删除它,但是整个字符串消失了。@semikus:您缺少了返回替换结果的
/r
部分,而不是修改字符串。因此,它对空格和数字有帮助,但引号仍然存在<代码>我的@stripArray=map s/^'([^']*)'$/$1/,@resultarray我试图这样删除它,但整个字符串消失。@塞米库斯:您缺少返回替换结果的
/r
部分,而不是修改字符串。最好更精确地匹配示例并检查错误:
my@data=/^(\S+)\S+=>\S+”(.*?)\S*$/或警告“意外输入:$”
@ysth——若第一个数字前面有一个或多个空格字符会怎么样?然后再加上它。但只要去掉锚,它就可以匹配所有可能不应该匹配的东西t@ysth--那么,包含数据的文件应该有其应包含的内容的规范。OP没有提供此类规范,并且假设不会出现其他数据变化形式。最好更准确地匹配示例并检查错误:
my@data=/^(\S+)\S+=>\S+“(.*?”\S*$/或警告“意外输入:$”
@ysth——若第一个数字前面有一个或多个空格字符会怎么样?然后再加上它。但只要去掉锚,它就可以匹配所有可能不应该匹配的东西t@ysth--那么,包含数据的文件应该有其应包含的内容的规范。OP未提供此类规范,并假设不会出现其他数据变更表。