7

私はこのシーケンスを信じられない思いで見ました:

my $line;
$rc = getline($line); # read next line and store in $line

Perl の引数は値によって渡されることをずっと理解していたので、大きな構造体を渡す必要があるときや、更新する変数を渡す必要があるときはいつでも、ref を渡しました。

しかし、perldoc の詳細を読んで、@_ が引数リストに記載されている変数のエイリアスで構成されていることを知りました。データの次のビットを読み取った後、getline()は$_[0] = $data;でそれを返します。$dataを$lineに直接格納します。

私はこれが好きです - C++ での参照渡しのようなものです。ただし、より意味のある名前を$_[0]に割り当てる方法は見つかりませんでした。ありますか?

4

3 に答える 3

7

あなたはできます、それはあまりきれいではありません:

use strict;
use warnings;

sub inc {
  # manipulate the local symbol table 
  # to refer to the alias by $name
  our $name; local *name = \$_[0];

  # $name is an alias to first argument
  $name++;
}

my $x = 1;
inc($x);
print $x; # 2
于 2013-05-28T04:04:20.237 に答える
0

複数の異なる引数を許可する @Steve のコードのバージョン:

sub my_sub {
  SUB:
  for my $thisarg ( $_[0] ) {
    for my $thatarg ($_[1]) {
      code here sees $thisarg and $thatarg as aliases 
      last SUB;
    }
  }
}

もちろん、これは複数レベルのネストと独自のコードの可読性の問題をもたらすため、絶対に必要な場合にのみ使用してください。

于 2013-06-27T12:47:17.510 に答える