arrays - 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 小时,所以认为是时候寻求帮助了。
解决方案
grep仅返回表达式为其返回 true 的列表元素。s///
如果没有可替换的内容,则返回 false,因此不会从grep
.
不要grep
用于更改列表的元素。这就是map
:
@stripArray = map s/\s+$//r, @resultarray;
您还可以在分隔符中包含空格,这样您以后就不必删除空格:
my @linearray = split /\s*=>\s*/, $line;
推荐阅读
- c# - 如何在多个衍生的任务 ConfigureAwait 任务上“WaitAll”?
- firebase - 是否可以为不活动实现自动注销功能?
- mysql - 未知的慢 sql 查询
- kotlin - 将一种类型的列表转换为另一种类型
- php - 将日期列表排序为唯一的年/月/日数组
- matplotlib - 在 plt.show() 之后绘图未显示,没有错误,仅显示:
- java - 服务中的 Android 位置管理器
- batch-file - 无法使用批处理脚本获取最新的 SVN 标记版本号
- python - 使用 psycopg2 批量更新 Postgres DB 中的行
- python - 为什么我不能将变量传递给 MySQLdb.connect()?