这个perl脚本做什么?看起来很棘手
perl脚本编写新手。试着去理解它的作用:S这个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$前缀(@前缀){
@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