0
(my $batch_name = $batch_dir) =~ s#.*/##;

我在浏览脚本时遇到了这个声明并试图理解它。即使谷歌搜索 RHS 也没有返回任何有用的信息。有人可以帮我理解这句话的意思吗???

两个标量中的哪个受到影响?

4

2 回答 2

2

它从变量/的副本中删除以 a 结尾的最长前缀,例如。$batch_dir从文件系统路径生成叶子名称或提取正确转义的 url 的脚本、查询和片段部分。

该成语实际上包括两个操作:

 my $batch_name = $batch_dir;
 batch_name =~ s#.*/##;

没有括号,替换将被应用$batch_dir$batch_name设置为从替换运算符返回的值,即成功状态(至少发生 1 次替换 => 1undef否则)。

于 2013-08-21T08:28:55.223 回答
0

Parens()的优先级高于=~,所以 parens 里面的指令先执行。

首先赋值my $batch_name = $batch_dir;完成,然后替换$batch_name =~ s#.*/##;

只有$batch_name变量受替换影响。

于 2013-08-21T08:36:58.600 回答