use*_*275 6 perl scalar arguments reference
我知道将标量传递给sub实际上是通过引用,但由于我是perl的新手,我仍然进行了以下测试:
#!/usr/bin/perl
$i = 2;
subr(\$i);
sub subr{
print $_[0]."\n";
print $$_[0]."\n";
}
Run Code Online (Sandbox Code Playgroud)
我认为第一行是打印一个地址,第二行是给回数,但第二行是空行.我被其他人指出要这样做:${$_[0]}
它打印出数字.但她不知道为什么没有{}它不起作用以及为什么它与{}合作.那发生了什么?
Ed *_*ess 15
这是因为你的第二个印刷声明相当于这样做......
my $x = $$_; print $x[0];
Run Code Online (Sandbox Code Playgroud)
当你想要的是
my $x = $_[0]; print $$x;
Run Code Online (Sandbox Code Playgroud)
换句话说,取消引用发生在计算数组下标之前.
当你添加那些curl-wurlies时,它告诉perl如何解释你想要的表达式; 它将$_[0]
首先评估,然后取消引用以获取值.
这是一个评估顺序的事情.
$$_[0] is evaluated as {$$_}[0]
Run Code Online (Sandbox Code Playgroud)
这是标量变量$ _的引用的第0个元素.它首先获取引用,然后尝试找到它的第0个元素.
${$_[0]}
Run Code Online (Sandbox Code Playgroud)
这是对数组@_的第0个元素的引用.它首先找到第0个元素然后参考它.
如果您设置use strict
并use warnings
在代码顶部,您将看到大量有关第一次尝试未定义值的警告.
归档时间: |
|
查看次数: |
9500 次 |
最近记录: |