代码之家  ›  专栏  ›  技术社区  ›  Eric Strom

如何在Perl中引用数组片?

  •  6
  • Eric Strom  · 技术社区  · 16 年前

    如何获取对数组切片的引用,以便在修改切片引用的元素时修改原始数组?

    以下代码由于以下原因而工作: @_ 别名魔术,但对我来说似乎有点像黑客:

    my @a = 1 .. 10;
    my $b = sub{\@_}->(@a[2..7]);
    @$b[0, -1] = qw/ < > /;
    print "@a\n";
    # 1 2 < 4 5 6 7 > 9 10
    

    谁有更好/更快的方法?

    2 回复  |  直到 16 年前
        1
  •  4
  •   Sinan Ünür    16 年前

    Data::Alias 似乎能做你想做的事:

    #!/usr/bin/perl
    
    use strict; use warnings;
    
    use Data::Alias;
    
    my @x = 1 .. 10;
    
    print "@x\n";
    
    my $y = alias [ @x[2 ..7] ];
    @$y[0, -1] = qw/ < > /;
    
    print "@x\n";
    

    1 2 3 4 5 6 7 8 9 10
    1 2 < 4 5 6 7 > 9 10
    
        2
  •  3
  •   ysth    16 年前

    您甚至可以使用它延迟哈希值的创建:

    $ perl -wle'my %foo; my $foo = sub{\@_}->($foo{bar}, $foo{baz}); print "before: ", keys %foo; $foo->[1] = "quux"; print "after: ", keys %foo'
    before: 
    after: baz