【问题标题】:Convert array to a string with newlines embeded in string将数组转换为字符串中嵌入换行符的字符串
【发布时间】:2021-01-28 05:48:10
【问题描述】:

我需要将 perl 数组转换为单个字符串变量,其中包含用换行符分隔的所有数组项。

my $content = "";
@names=('A','C','C','D','E');
$content = $content . join($", @names) . "\n";
print $content;

我希望输出如下:

A
C
C
D
E

但我明白了:

A C C D E

为什么不尊重换行符\n

【问题讨论】:

    标签: arrays perl


    【解决方案1】:

    由于您似乎不仅需要在每行之间添加换行符,还需要在最后一行之后添加换行符,因此您可以使用以下任何一种:

    join("\n", @names) . "\n"
    
    join("", map "$_\n", @names)
    
    join("\n", @names, "")
    

    这些是等价的,除非数组为空。在这种情况下,第一个产生换行符,另一个产生一个空字符串。


    顺便说一句,

     $content = $content . EXPR;
    

    可以写成

     $content .= EXPR;
    

    【讨论】:

    • 略有不同:如果数组为空,join("", map "$_\n", @names) 产生"",而不是"\n"
    • 我通常只做例如join("\n", @array, "")
    【解决方案2】:

    要加入一个中间有换行符的数组,请使用

    join("\n", @array)
    

    您的代码使用$" 变量的内容作为分隔符,默认情况下包含一个空格。

    【讨论】:

      【解决方案3】:

      改为这样做:

      $content = $content . join("\n", @names);
      

      【讨论】:

        【解决方案4】:

        $" 变量保存 Perl 在将数组插入双引号字符串时在数组元素之间使用的值。默认情况下(并且您没有更改它),它是一个空格。

        也许您正在考虑输入或输出记录分隔符,$/$\

        但是,您并不想真正使用这些变量。如果需要换行符,请使用换行符:

        join "\n", @array;
        

        【讨论】:

          猜你喜欢
          • 2011-06-18
          • 2017-11-27
          • 1970-01-01
          • 2022-01-23
          • 2016-03-10
          • 1970-01-01
          相关资源
          最近更新 更多