我正在看一些使用File::Path创建和删除文件路径的示例代码。

http://perldoc.perl.org/File/Path.html

我可以使这些功能正常运行,但是在使错误消息正确运行方面有些困难。在捕获错误消息的示例中,他们在\之前使用my。这个\的目的是什么?

# Sample code from the link above
remove_tree( 'foo/bar', 'bar/rat', {error => \my $err} );  # why escape the my?!?!
if (@$err) {
    for my $diag (@$err) {
        my ($file, $message) = %$diag;
        if ($file eq '') {
            print "general error: $message\n";
        }
        else {
            print "problem unlinking $file: $message\n";
        }
    }
}
else {
    print "No error encountered\n";
}

我以前从未见过,也无法在任何地方找到解释。我尝试删除\,但收到语法错误,因此很明显这是必需的,但是为什么呢?

最佳答案

不,在Perl中my的优先级高于\,因此my $err应用于的是整个表达式\\本身并不是真正的逃脱;引用http://perldoc.perl.org/perlref.html#Making-References:

引用可以通过多种方式创建。

  • 通过在变量,子例程或值上使用反斜杠运算符。 (这非常类似于C中的&​​(地址)运算符。)这通常会创建对变量的另一个引用,因为符号表中已经存在对该变量的引用。但是符号表引用可能会消失,并且您仍然拥有反斜杠返回的引用。

  • 例如:
    my $scalarref = \$foo;
    
    使$scalarref成为对现有标量变量$foo的引用。相比之下,
    my $scalarref = \my $foo;
    
    创建一个新的标量变量$foo并使$scalarref对其进行引用,这样可以使其更紧凑。

    关于perl - Perl“\my $ var”为什么“my”以反斜杠转义?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27365918/

    10-16 14:51