最近工作中用到了 perl 脚本, 涉及到了参数传递, 但是参数传过来值为1.

sub valid_value{
	my $value = @_;
	print "$value\n";
}

第一点: perl 脚本函数传参

这里的 @_ 是把参数看成了一个数组

第二点: 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];