我想了解一个程序。如果我错了,请更正我,但是反引号用于在shell中执行命令,因此我不确定在以下代码中它的用途是什么:

my $end = $` if $dir =~ m/\/foldername/;
foreach my $folder (@dirs_) {
    my $start_from = "$dir" . "\/" . "$folder";
    my $move_to    = "$end" . "\/" . "$folder";
    rmtree $move_to;
    dircopy($start_from, $move_to);
}

最佳答案

它不是很漂亮。
$`变量是三位一体$`$&$'之一,它们表示经过正则表达式成功比较的最后一个字符串的匹配前,匹配和匹配后部分

例如,如果我有

my $s = 'abcdef';

然后
$s =~ /c./;

您会发现$`ab$&cd$'ef
重要的是要记住,就像捕获变量$1$2等一样,这三个不受正则表达式匹配失败的影响。 (它们未设置为undef。)因此,在使用任何正则表达式模式之前,先检查它们是否匹配至关重要

这是古老的Perl,主要是为了向后兼容而维护的。当时这是个好主意,因为Perl与shell语法保持紧密联系(awk和sed仍然如此)。如今,最好将正则表达式捕获或substr与较新的@-@+数组结合使用

所有特殊的内置变量都记录在perldoc perlvar

关于perl - 目录名称开头的反引号是什么? (perl),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37262852/

10-12 23:27