最近工作中用到了 perl 脚本, 涉及到了参数传递, 但是参数传过来值为1.
sub valid_value{
my $value = @_;
print "$value\n";
}
第一点: perl 脚本函数传参
https://www.cnblogs.com/tobecrazy/archive/2013/06/11/3131887.html
这里的 @_ 是把参数看成了一个数组
第二点: perl 赋值
标量 $ 开始, 如$a $b 是两个标量。
数组 @ 开始 , 如 @a @b 是两个数组。
哈希 % 开始 , %a %b 是两个哈希。
变量上下文
所谓上下文:指的是表达式所在的位置。
上下文是由等号左边的变量类型决定的,等号左边是标量,则是标量上下文,等号左边是列表,则是列表上下文。
Perl 解释器会根据上下文来决定变量的类型。实例如下:
@names = ('google', 'runoob', 'taobao');
@copy = @names; # 复制数组
$size = @names; # 数组赋值给标量,返回数组元素个数
print "名字为 : @copy\n";
print "名字数为 : $size\n";
以上程序执行输出结果为:
名字为 : google runoob taobao
名字数为 : 3
分析
因为 @_ 接受的是数组, 所以赋值给标量的时候等于 1.
修改
my $value = @_[0];
另外: 如果改为 $value = $_; , 虽然打印出来是传的参数的值, 但是判断的时候还是不相等。也需要添加下标
my $value = $_[0];