ローカル変数をPerlサブルーチンに渡して変更するにはどうすればよいですか?Perlサブルーチンの変数を変更する
use strict;
use warnings;
sub modify_a
{
# ????
}
{
my $a = 5;
modify_a($a);
print "$a\n"; # want this to print 10
}
ローカル変数をPerlサブルーチンに渡して変更するにはどうすればよいですか?Perlサブルーチンの変数を変更する
use strict;
use warnings;
sub modify_a
{
# ????
}
{
my $a = 5;
modify_a($a);
print "$a\n"; # want this to print 10
}
あまり魔法のアプローチは、参照を渡すことです。
use strict;
use warnings;
sub modify_a
{
my ($a_ref) = @_;
$$a_ref = 10;
}
{
my $a = 5;
modify_a(\$a);
print "$a\n";
}
sub modify_a {
$_[0] *= 2;
}
@_
の要素が渡された値にエイリアスされているので、あなたが直接これを変更した場合、あなたは、呼び出し元の値を変更します。これは時には便利なこともありますが、通話者にとっては通常は驚きであるため、一般的にはお勧めしません。
渡される変数のリストが長くて、名前で参照したいのですが? – jeffythedragonslayer
@jeffythedragonslayer - Data :: Aliasモジュールをチェックアウトします。しかし、驚きの要因のため、参照はIMOより優れています。 – Tanktalus
私はちょうど私が参照でそれを理解したと言いました、私はデータ::エイリアスもチェックアウトします。 – jeffythedragonslayer
'$ a'や' $ b'を変数として使うことを避けるべきです。なぜなら、 'sort'関数のために予約されているからです。 – stevieb