Rag*_*h V 1 scripting perl pattern-matching string-matching output
我不明白"my"关键字如何在这里工作.这是我的perl脚本.
$line = ' sdfaad(asdvfr)';
Run Code Online (Sandbox Code Playgroud)
代码1:
if ($tmp = $line =~ /(\(\s*[^)]+\))/ ) {
print $tmp;
}
Run Code Online (Sandbox Code Playgroud)
输出:
1
Run Code Online (Sandbox Code Playgroud)
码2:
if (my ($tmp) = $line =~ /(\(\s*[^)]+\))/ ) {
print $tmp;
}
Run Code Online (Sandbox Code Playgroud)
输出:
(asdvfr)
Run Code Online (Sandbox Code Playgroud)
为什么两个输出不同?是否与使用有关my?
这不是my有区别的,而是标量/列表上下文.周围$tmp的大括号强加列表上下文,
if (($tmp) = $line=~ /(\(\s*[^)]+\))/ ) # braces makes difference, not 'my'
Run Code Online (Sandbox Code Playgroud)
虽然my只将变量声明为词法范围的变量.