You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Perl哈希去除换行问题:清除表格导入哈希中的换行符

解决Perl哈希中电子表格导入的换行问题

问题分析

你已经移除了回车符^M(即\r),但字符串中间的换行符\n仍存在——chomp函数仅能删除字符串末尾的换行符,对字符串中间的换行无效,所以没法解决多行显示的问题。

针对性解决方案

根据你的期望输出,针对键(如$title)和值(如$num)需要不同的处理逻辑:

代码修改

$title = $sheet->{Cells}[0][$col]{Val};
$num = $sheet->{Cells}[$row+1][$col]{Val};

# 处理键:只保留换行前的内容(比如把"JOHN\nhas a car"变成"JOHN")
$title =~ s/\r?\n.*//s;  # 移除第一个换行及之后的所有内容,s修饰符让.匹配换行
$title =~ s/\r//g;       # 清理剩余的回车符

# 处理值:将所有换行/回车替换为空格,合并成单行
$num =~ s/[\r\n]/ /g;    # 把所有回车、换行换成空格
$num =~ s/\s+/ /g;       # 合并连续的多个空格为单个
$num =~ s/^\s+|\s+$//g;  # 去除字符串首尾的空格

逻辑说明

  1. 处理键:用正则\r?\n.*匹配第一个换行(包含可能的前置回车)及之后的所有内容,直接替换为空,只保留第一行文本。
  2. 处理值:先把所有换行/回车统一替换为空格,再清理多余的连续空格和首尾空格,确保内容合并为一行规整的文本。

这样处理后,Data::Dumper打印出的哈希结构就会和你期望的一致。

内容的提问来源于stack exchange,提问作者paaven

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 13:15:58