use*_*757 2 perl hash slice replicate
好的,我理解perl哈希切片和Perl中的"x"运算符,但是有人可以从这里解释下面的代码示例(稍微简化)吗?
sub test{
my %hash;
@hash{@_} = (undef) x @_;
}
Run Code Online (Sandbox Code Playgroud)
示例调用sub:
test('one', 'two', 'three');
Run Code Online (Sandbox Code Playgroud)
这条线是什么引发了我:
@hash{@_} = (undef) x @_;
Run Code Online (Sandbox Code Playgroud)
它正在创建一个哈希,其中键是sub的参数并初始化为undef,因此:
%哈希:
'one'=> undef,'two'=> undef,'three'=> undef
x运算符的rvalue应该是一个数字; 如何将@_解释为子参数数组的长度?我希望你至少要做到这一点:
@hash{@_} = (undef) x scalar @_;
Run Code Online (Sandbox Code Playgroud)
FMc*_*FMc 10
要弄清楚这段代码,您需要了解三件事:
重复运算符.该x运营商的重复操作.在列表上下文中,如果运算符的左侧参数括在括号中,它将重复列表中的项:
my @x = ('foo') x 3; # ('foo', 'foo', 'foo')
Run Code Online (Sandbox Code Playgroud)
标量上下文中的数组.在标量上下文中使用数组时,它返回其大小.该x运营商强加给它的右边的参数标量上下文.
my @y = (7,8,9);
my $n = 10 * @y; # $n is 30
Run Code Online (Sandbox Code Playgroud)
哈希切片.该散片语法提供了一种同时访问多个哈希项目.哈希切片可以检索哈希值,也可以将其分配给哈希值.在手头的情况下,我们分配一个哈希切片.
# Right side creates a list of repeated undef values -- the size of @_.
# We assign that list to a set of hash keys -- also provided by @_.
@hash{@_} = (undef) x @_;
Run Code Online (Sandbox Code Playgroud)
做同样事情的不那么模糊的方法:
@hash{@_} = ();
$hash{$_} = undef for @_;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1640 次 |
| 最近记录: |