我有一个所有图像名称的列表,现在我想在运行前通过换行加入它,所以我这样做了:
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);
这两种方式有什么区别?
答案 0 :(得分:3)
在单引号中,只有\'
和\\
是特殊的。
在双引号中,许多字符组合具有特殊含义。我们说双引号是"插值"。请参阅"引用和引用类似的运算符"在perlop了解详情。
答案 1 :(得分:1)
这是关于创建引用的字符串。它与join()
无关。
字符串文字通常由单个或双重分隔 引号。它们的工作方式与标准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与许多(可能是大多数)其他编程语言共享的功能。