如何在 Perl 中将列表输出为逗号分隔值?

Posted

技术标签:

【中文标题】如何在 Perl 中将列表输出为逗号分隔值?【英文标题】:How can I output a list as comma-separated values in Perl? 【发布时间】:2010-05-21 15:48:02 【问题描述】:

假设我有一个元素列表

@list=(1,2,3);
#desired output
1,2,3

我想将它们打印为逗号分隔值。最重要的是,我不希望最后一个元素后面有逗号。

在 Perl 中最简洁的方法是什么?

【问题讨论】:

【参考方案1】:
print join(',', @list), "\n";

【讨论】:

【参考方案2】:

您有多种选择。最通用的是用join函数加入它们:

print join(',', @list), "\n";

另一种方法是修改special variables,这会影响print语句。比如上面的效果可以用

$, = ",";
$\ = "\n";
print @list;

如果列表经过双引号扩展,您也可以自动加入:

$" = ",";
print "@list","\n";

请注意,如果您修改 $,$\$" 等特殊变量,则需要全局设置它们。为避免这种情况,请使用 local 关键字并将操作数括在一个块中。

【讨论】:

【参考方案3】:

对于简单的情况,join 是完美的。

但如果你想生成或解析 CSV 文件,你最好使用Text::CSV。它将为您处理引用和转义逗号以及各种其他有害问题。它也非常快。

【讨论】:

再次,以错误的答案引导! :) 没有简单的案例。只有简单的测试数据并不能显示所有真实案例。 是的,@brian,有一些简单的案例。例如,您可以轻松处理“数据值可能不包含逗号”的规范或标准。在一般情况下,join 是创建 CSV 文件的正确方法吗?不,绝对不是。但是 OP 询问如何在除最后一个之外的每个值之后打印带有逗号的值列表 - 除了在相邻值之间放置逗号之外,结果是机器可解析或转义/引用任何其他要求或任何其他要求 - 那就是 正是 join 做了什么。 根据我的经验,即使规范说最终会发生变化,如果您要推荐快捷方式,则需要强调陷阱。否则,人们走捷径,以后会伤害自己。 每次要打印几个逗号分隔值时使用 Text::CSV 严重过度设计。另一方面,如果您正在生成 CSV 文件,那么它肯定是正确的方法。我坚持我之前所说的。是的,规格改变,程序改变,sh*t-发生。设计不足的解决方案是有成本的,但过度设计也是如此。由从业者决定哪种方法有意义。【参考方案4】:
join(',', @list);

【讨论】:

【参考方案5】:

用逗号加入列表。

@list=(1,2,3);
$output = join(",",@list);

【讨论】:

以上是关于如何在 Perl 中将列表输出为逗号分隔值?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Azure Databricks SQL 中将字段值转换为逗号分隔

如何在 BASH 中将制表符分隔值 (TSV) 文件转换为逗号分隔值 (CSV) 文件?

如何在 Oracle 中将多行组合成逗号分隔的列表? [复制]

如何在 SQL Server 2005 中将多行组合成以逗号分隔的列表?

在mysql中将分隔字符串转换为多个值

如何在 jinja python 模板中输出逗号分隔列表?