嵌套“if”,缺少右侧卷曲或方括号

时间:2014-09-29 04:22:15

标签: perl if-statement

我目前有以下内容:

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";
    }

有人可以向我解释为什么会这样吗?

感谢您的帮助!

1 个答案:

答案 0 :(得分:7)

棘手!问题是以下是哈希查找的开始:

$3{

你想要相当于

$3 . "{"

可以写成

"${3}{"

以下情况适用于这种情况,因为\不可能是变量的一部分:

"$3\{"

但是不能总是使用这个技巧。例如,考虑

$foo . "bar"

如果您尝试

"$foo\bar"

你会发现你

$foo . chr(0x08) . "ar"

因为"\b"返回“铃”字符。那就离开了你

"${foo}bar"