加入" \ n"并加入' \ n'在Perl

时间:2018-03-24 14:32:20

标签: perl

我有一个所有图像名称的列表,现在我想在运行前通过换行加入它,所以我这样做了:

print (join '\n', @all_img_name);

以上行将产生这种输出:

  

meomeo_0\nmeomeo_1\nmeomeo_2\nmeomeo_3\nmeomeo_4\nmeomeo_5\nmeomeo_6\nmeomeo_7\nmeomeo_8\nmeomeo_9\nmeomeo_10\nmeomeo_11\nmeomeo_12\nmeomeo_13\nmeomeo_14\nmeomeo_15

如果我这样做,我会把一切都搞定:

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

这两种方式有什么区别?

2 个答案:

答案 0 :(得分:3)

在单引号中,只有\'\\是特殊的。

在双引号中,许多字符组合具有特殊含义。我们说双引号是"插值"。请参阅"引用和引用类似的运算符"在perlop了解详情。

答案 1 :(得分:1)

这是关于创建引用的字符串。它与join()无关。

来自perldoc perldata

  

字符串文字通常由单个或双重分隔   引号。它们的工作方式与标准Unix shell中的引号非常相似:   双引号字符串文字受反斜杠和变量的影响   代换;单引号字符串不是(“\”和。除外)   “\”)。通常的C风格反斜杠规则适用于制作角色   例如换行符,制表符等,以及一些更奇特的形式。看到   “引用和引用类操作符”在perlop中列表。

按照阅读perldoc perlop的建议,我们找到这个列表,它告诉我们哪些类似引号的运算符插入变量和C样式的转义序列(如\n):

Customary  Generic        Meaning          Interpolates
''         q{}            Literal          no
""         qq{}           Literal          yes
``         qx{}           Command          yes*
           qw{}           Word list        no
//         m{}            Pattern match    yes*
           qr{}           Pattern          yes*
           s{}{}          Substitution     yes*
           tr{}{}         Transliteration  no (but see below)          
           y{}{}          Transliteration  no (but see below)
           <<EOF          here-doc         yes*

* unless the delimiter is ''.

这个转义序列列表:

Sequence     Note  Description
\t                  tab               (HT, TAB)
\n                  newline           (NL)
\r                  return            (CR)
\f                  form feed         (FF)
\b                  backspace         (BS)
\a                  alarm (bell)      (BEL)
\e                  escape            (ESC)
\x{263A}     [1,8]  hex char          (example: SMILEY)
\x1b         [2,8]  restricted range hex char (example: ESC)
\N{name}     [3]    named Unicode character or character sequence
\N{U+263D}   [4,8]  Unicode character (example: FIRST QUARTER MOON)
\c[          [5]    control char      (example: chr(27))
\o{23072}    [6,8]  octal char        (example: SMILEY)
\033         [7,8]  restricted range octal char  (example: ESC)

(我省略了注释 - 可以在上面的链接中找到它们。)

总结所有这些,你的问题的答案是\n(以及大多数其他C风格的转义序列)用双引号字符串扩展而不是单引号字符串。

这是Perl与许多(可能是大多数)其他编程语言共享的功能。