代码之家  ›  专栏  ›  技术社区  ›  David Tonhofer

Perl的“Switch”抓住了HERE文档中的一个“case”字符串,然后弄糊涂了?

  •  1
  • David Tonhofer  · 技术社区  · 6 年前

    我有一些Perl代码,还有一个HERE文档。在HERE文档的文本中,嵌入了关键字 案例 . 这似乎使整个国家感到不安 Switch

    #!/usr/bin/perl
    
    use strict;
    use warnings;
    use utf8;  # Meaning "This lexical scope (i.e. file) contains utf8"
    
    use Switch;
    
    sub printUsage {
       print STDERR << "HERE";
    
                           +
      --rollback           | - In case of "--reallydo", perform a ROLLBACK instead of a COMMIT at
                           |   transaction end.
                           + 
    HERE
    }
    

    在Perl 5.16中运行此命令可以得到:

    Bad case statement (invalid case value?) near avo2.pl line 13
    

    In case of Perl bug tracker ?

    1 回复  |  直到 6 年前
        1
  •  6
  •   JGNI    6 年前

    不要 use Switch 如果您可以避免它,它是一个源代码过滤器,您已经发现了一个潜伏在它的深处的bug。given()/when()会更好,但这有问题,现在被标记为实验性的。如果你想要一个案例陈述的等价物,试试看

    for ($test_this) {
        if ( ! /\D/ ) {
            say 'is numbers';
            last;
        }
        if ( $_ eq 'exit' ) {
            say 'exit found';
            last;
        }
        if (/^\p{Lu}/) {
            say 'Upper case letter';
            last;
        }
        # Default option
        say 'Default';
        last;
    }