Perl的“ Switch”在HERE文档中获取了一个“ case”字符串,感到困惑吗?

时间:2018-11-12 13:59:03

标签: perl

我有一些Perl代码,还有一个HERE文档。在HERE文档的文本中,嵌入了关键字 case 。这似乎使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 个答案:

答案 0 :(得分:6)

如果可以避免的话,请不要use Switch,它是一个源过滤器,您已经发现了隐藏在其中的漏洞之一。 named()/ when()会更好,但是有问题,现在标记为实验性的。如果您希望获得与case语句等效的选项,请尝试

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