如何在Perl中以逗号分隔值的形式输出列表?

Mik*_*ike 8 perl text-formatting

假设我有一个元素列表

@list=(1,2,3);
#desired output
1,2,3
Run Code Online (Sandbox Code Playgroud)

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

在Perl中最干净的方法是什么?

Whi*_*ind 15

print join(',', @list), "\n";
Run Code Online (Sandbox Code Playgroud)


P S*_*ved 10

你有几个选择.最通用的是将它们与join函数连接起来:

print join(',', @list), "\n";
Run Code Online (Sandbox Code Playgroud)

另一种方法是修改影响语句的特殊变量print.例如,可以实现上述效果

$, = ",";
$\ = "\n";
print @list;
Run Code Online (Sandbox Code Playgroud)

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

$" = ",";
print "@list","\n";
Run Code Online (Sandbox Code Playgroud)

请注意,如果您修改特殊变量$,,$\或者$",则可以全局设置它们.要避免它,请使用local关键字并将操作数括在一个块中.


dao*_*oad 5

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

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

  • 是的,@ brian,有一些简单的案例.例如,您可以轻松处理"数据值可能不包含逗号"的规范或标准.在一般情况下,`join`是创建CSV文件的正确方法吗?不,绝对不是.但是OP询问如何在除了最后一个之外的每个值之后用逗号打印一个值列表 - 没有关于结果是机器可解析的或者转义/引用任何内容或任何其他要求,除了在相邻值之间添加逗号 - 这就是*确切的*什么是`join`. (3认同)