部分反斜线转义字符序列
转义序列 | 描述 |
---|---|
\a | ASCII响铃字符 |
\b | 退格 |
\r | 回车 |
\n | 换行 |
\t | 制表符号 |
\f | 换页 |
\c[NAME] | 按名字指定字符 |
\q[...] | 对括号中的部分加单引号 |
\qq[...] | 对括号中部分加双引号 |
\x[ABCD] | 按十六进制码数指定字符 |
部分引号形式
短名 | 长名 | 描述 |
---|---|---|
「...」 | 字面量字符串 | 默认定界直角引号 |
Q '...' | 字面量字符串 | 有替代定界符的广义引号 |
Q[...] | 字面量字符串 | 有成对定界符的广义引号 |
'...' | 转义字符串 | 默认定界符单引号 |
q{...} | 转义字符串 | 使用替代的成对定界符 |
Q:q[...] | 转义字符串 | 带:q副词的广义引号 |
"..." | 插值字符串 | 默认定界符双引号 |
qq[...] | 插值字符串 | 使用替代的成对定界符 |
Q:qq '...' | 插值字符串 | 带:qq副词的广义引号 |
Q:c '...{}...' | 插值字符串 | 只对大括号中部分插值的广义引号 |
Q:to(HERE) | 字面量字符串 | Here doc |
q:to(HERE) | 转义字符串 | Here doc |
qq:to(HERE) | 插值字符串 | Here doc |
部分引号副词:
短名 | 长名 | 描述 |
---|---|---|
:x | :exec | 执行shell命令并返回结果 |
:q | :single | 对\,\qq[...]和转义定界符插值 |
:double | 组合 :s,:a,:h,:f,:c,:b的插值 | |
:s | :scalar | 对$变量插值 |
:a | :array | 对@变量插值 |
:h | :hash | 对%变量插值 |
:f | :function | 对&调用插值 |
:c | :closure | 对{...}中的代码插值 |
:b | :blackslash | 对\n,\t和其他特殊序列插值 |
:to | :heredoc | 解析结果作为here doc终止符 |
:v | :val | 如果可能,转换为语素变体 |
Example:
put "The escaped \" stays in the string";
put "The snowman is \x[2603]";
my $name = 'Hamadryas perlicus';
put "The best butterfly is $name";
my $answer = prompt 'What\'s your favorite animal?';
put qq/\$answer is: \n\t$answer/;
put Q :qq /\$answer is type {$answer.^name}/;
my $genus = 'Hamadryas perlicus';
put '$genus is \qq[$genus]';
put "\q[$genus] is $genus";
my $multi-line = qq :to/HERE/;
Hamadryas perlicus: 19
Vanessa atalanta: 17
Nymphalis antopia: 0
$genus;
HERE
put $multi-line;
put qq :to/END/;
The genus is $genus
END
my $uname = qx/hostname/.chomp;
put "The hostname is $uname";
put "The hostname is {qx/hostname/.chomp}";
print "The hostname is {qx/hostname/}";
print Q :q :x /hostname/;
print Q :q :exec /hostname/;
print Q :single :exec /pwd/;
my $name= 'Hamadryas';
print Q :s:c:b "\r \n {2+2} $name";
print qq :!c /No {2+2} interpolation $name/;
在人的职业生涯中,有时可能会创建一个无限循环。你可能坐在那里看着屏幕,心里奇怪为什么什么也没发生。在这种情况下,可以用Ctrl-C中断你的程序。