まず、サブルーチンは@ARGV
配列に渡されません。むしろ、サブルーチンに渡されるすべてのパラメーターは、サブルーチン内で表される単一のリストにフラット化され@_
ます。@ARGV 配列は、スクリプトに渡されるコマンド ライン引数を含む、スクリプトの最上位で使用できます。
現在、Perl では、オブジェクトのメソッドを呼び出すと、オブジェクトは暗黙的にパラメーターとしてメソッドに渡されます。
継承を無視すると、
$obj->doCoolStuff($a, $b);
と同等です
doCoolStuff($obj, $a, $b);
つまり、@_
メソッドの内容は次のdoCoolStuff
ようになります。
@_ = ($obj, $a, $b);
現在、shift
組み込み関数は、パラメーターなしで、要素をデフォルトの配列変数からシフトアウトします@_
。この場合、それは になります$obj
。
あなたがそうするとき$self = shift
、あなたは効果的に言ってい$self = $obj
ます。
->
また、これにより、表記法を介してメソッドに他のパラメーターを渡す方法が説明されることを願っています。上記の例を続けると、次のようになります。
sub doCoolStuff {
# Remember @_ = ($obj, $a, $b)
my $self = shift;
my ($a, $b) = @_;
さらに、 Perl の優れたオブジェクト レイヤーですが、各メソッドで自分自身Moose
を初期化する必要があるという要件がなくなるわけではありません。$self
これを常に覚えておいてください。C++ や Java などの言語はオブジェクト参照this
を暗黙的に初期化しますが、Perl では、作成するメソッドごとに明示的に初期化する必要があります。