我目前有以下内容:
elsif ($line =~ /^(\s*)(if|elif|else)\s*(.+)*\s*:\s*$/) {
# Multiline If
# Print the If/Elif condition
if ($2 eq "if"){
print "$1$2 ($3){\n";
}
elsif ($2 eq "elif"){
print "$1elsif ($3){\n";
}
elsif ($2 eq "else"){
print "$1$2 $3{\n";
}
# Add the space before the word "if"/"elif"/"else" to the stack
push(@indentation_stack, $1);
}
我收到了规定的错误,但我不确定原因。在最后的elsif
中,如果我在\
语句中的{
之前添加print
,则代码不会生成错误。
I.E:
elsif ($2 eq "else"){
print "$1$2 $3\{\n";
}
有人可以向我解释为什么会这样吗?
感谢您的帮助!
答案 0 :(得分:7)
棘手!问题是以下是哈希查找的开始:
$3{
你想要相当于
$3 . "{"
可以写成
"${3}{"
以下情况适用于这种情况,因为\
不可能是变量的一部分:
"$3\{"
但是不能总是使用这个技巧。例如,考虑
$foo . "bar"
如果您尝试
"$foo\bar"
你会发现你
$foo . chr(0x08) . "ar"
因为"\b"
返回“铃”字符。那就离开了你
"${foo}bar"