gpt4 book ai didi

perl - 直接将参数更改为子例程

转载 作者:行者123 更新时间:2023-12-01 12:42:13 25 4
gpt4 key购买 nike

如果我可以像 shift、push 和其他内置子例程那样使用子例程,那么我的脚本中的很多事情都会变得更容易:它们都可以直接更改传递给它的变量,而不需要返回更改。

当我尝试这样做时,变量会在某个时候被复制,而我似乎只是在更改副本。我知道这对引用没问题,但它甚至会发生在数组和散列中,我觉得我只是将我正在处理的变量传递给 sub,以便可以在其上完成更多工作:

@it = (10,11);
changeThis(@it);
print join(" ", @it),"\n"; #prints 10 11 but not 12

sub changeThis{
$_[2] = 12;
}

有没有办法做到这一点?我知道这不是最佳做法,但对我来说会很方便。

最佳答案

这就是原型(prototype)的用途:

#!/usr/bin/perl

use strict;
use warnings;

sub changeThis(\@); # the argument will be seen as an array ref (prototype must come before the call!)

my @it = (10,11);
changeThis @it; # even when called with an array
print join(" ", @it),"\n"; #prints 10 11 12

sub changeThis(\@)
{ my( $ar)= @_; $ar->[2]= 12; }

参见 http://perldoc.perl.org/perlsub.html#Prototypes获取更多信息。

虽然这并不是一个真正流行的方法,传递实际的数组引用可能是一个更好的选择,涉及的魔法更少。

关于perl - 直接将参数更改为子例程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6411668/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com