【问题标题】:How can I print list elements separated by line feeds in Perl?如何在 Perl 中打印由换行符分隔的列表元素?
【发布时间】:2009-12-09 08:52:41
【问题描述】:

在 Perl 中打印由换行符分隔的所有列表元素的最简单方法是什么?

【问题讨论】:

  • 无需花哨。遍历元素,将它们打印出来,然后是 \n。够容易吗?
  • 我实际上会反对相反的立场; perl 是专门为获得、停留和炫耀“花哨”而创建的。作为参考,我推荐:youtube.com/watch?v=O-zpOMYRi0w

标签: perl


【解决方案1】:
print "$_\n" for @list;

在 Perl 5.10 中:

say for @list;

另一种方式:

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

或(5.10):

say join "\n", @list;

或者怎么样:

print map { "$_\n" } @list;

【讨论】:

  • 我倾向于在列表末尾添加一个虚拟元素:print join("\n", @list, '')
  • 这适用于这种情况,但如果您想将它与换行符以外的其他内容(我偶尔会这样做)连接起来,并且如果您改变了对输出格式的想法看,这样做只会增加一些额外的工作。
  • @ChrisLutz 为什么我使用 print join("\n", "@list"), "\n"; ### "@list" 前后的双逗号?
【解决方案2】:

为什么不滥用 Perl 的全局变量

local $\ = "\n";
local $, = "\n";
print @array;

如果您对不必要的变量插值感到兴奋,请随意使用此版本:

local $" = "\n";
print "@array\n";

【讨论】:

  • 当然,我们可以让这个全局变量滥用安全卫生:sub arrprint (\@;$$) { my @a = @{shift()}; local $\ = @_ ? shift : $\; local $, = @_ ? shift : $,; print @$aref; }(代码未经测试)
【解决方案3】:
print join "\n", @list;

【讨论】:

  • 这不会在末尾打印换行符,这在 Windows 上还不错,但在 *nix 系统上看起来很丑。
  • 然后呢?问题具体说分隔。
  • 大多数人希望在他们打印的内容的末尾打印换行符。这就是为什么大多数语言都提供了可以做到这一点的功能。甚至 C 也可以使用 puts()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-16
  • 1970-01-01
  • 2013-08-13
  • 2012-10-12
  • 2019-01-20
  • 1970-01-01
相关资源
最近更新 更多