这个perl脚本做什么?看起来很棘手

这个perl脚本做什么?看起来很棘手,perl,Perl,perl脚本编写新手。试着去理解它的作用:S @prefixes = ( "ROOT1", "ROOT2" ); $path = <>; foreach my $prefix (@prefixes) { if($path =~ /\/$prefix\/(.*?)(\/|$)/ ) { print "$1\n"; last; } } @前缀=(“ROOT1”、“ROOT2”); $path=; foreach my$前缀(@前缀){

perl脚本编写新手。试着去理解它的作用:S

@prefixes = ( "ROOT1", "ROOT2" );

$path = <>;
foreach my $prefix (@prefixes) {
    if($path =~ /\/$prefix\/(.*?)(\/|$)/ ) {
        print "$1\n";
        last;
    }
}
@前缀=(“ROOT1”、“ROOT2”);
$path=;
foreach my$前缀(@前缀){
如果($path=~/\/$prefix\/(.*)(\/\$)/){
打印“$1\n”;
最后;
}
}

它打印上一个目录的输入中的下一个目录是ROOT1或ROOT2。示例:

/ROOT1/x/y   -> x
/ROOT1/z     -> z
/ROOT2/bla   -> bla
x/ROOT2/y/z  -> y
ROOT1/x      ->
/bla/x       -> 

它打印上一个目录的输入中的下一个目录是ROOT1或ROOT2。示例:

/ROOT1/x/y   -> x
/ROOT1/z     -> z
/ROOT2/bla   -> bla
x/ROOT2/y/z  -> y
ROOT1/x      ->
/bla/x       -> 

它设置预定义前缀的数组:

@prefixes = ( "ROOT1", "ROOT2" );
然后,它从标准输入读取路径:

$path = <>;
同时,它收集前缀(
(.*)
)后面的任何内容,直到下一个正斜杠,或者直到末尾(
(\/$)
)。如果路径与前缀匹配,则打印出收集的零件并退出循环:

print "$1\n";
last;
因此,简而言之,它会查找与路径匹配的第一个前缀,并打印前缀后面的路径部分


编辑:“直到最后一个正斜杠”->“直到下一个正斜杠”

它设置一个预定义前缀数组:

@prefixes = ( "ROOT1", "ROOT2" );
然后,它从标准输入读取路径:

$path = <>;
同时,它收集前缀(
(.*)
)后面的任何内容,直到下一个正斜杠,或者直到末尾(
(\/$)
)。如果路径与前缀匹配,则打印出收集的零件并退出循环:

print "$1\n";
last;
因此,简而言之,它会查找与路径匹配的第一个前缀,并打印前缀后面的路径部分


编辑:“直到最后一个正斜杠”->“直到下一个正斜杠”

感谢您的详细回答。如果($path=~/\/$prefix\/(.*?)(\/\$)/){更改为以便从ROOT1(ROOT1/a/b)获取第二个目录,其中返回b以获取第二个目录,正则表达式将是:
/\/$prefix\/.*?(\/\$)/
我找到了。我认为括号表示分配给变量?所以/\/$prefix\/$prefix\/(.*?)/(.*?)(\/$)/第一个目录(a)将是$1,第二个目录(b)将是$2tanks以获得详细的答案。如果($path=~/\/$prefix\/(.*)(\/\$)/){更改为以便从ROOT1(ROOT1/a/b)获取第二个目录,其中返回b以获取第二个目录,正则表达式将是:
/\/\/$prefix\/.*?/(\/.*)(\/\/$)/
我明白了。我认为括号表示赋值给变量?因此/\/$prefix\/(.*?)/(.*?)/第一个目录(a)是$1,第二个目录(b)是$2