リストに
この構造は、 「bareword (LIST1), LIST2
関数bareword
を引数に適用する」ことを意味しますが、「結合リストの引数に適用する」ことを必ずしも意味するわけではありません。これは、引数をグループ化するために重要です。LIST1
bareword +(LIST1), LIST2
bareword
LIST1, LIST2
my ($a, $b, $c) = (0..2);
print ($a or $b), $c; # print $b
print +($a or $b), $c; # print $b, $c
プレフィックス+
を使用して、ハッシュ参照をブロックから、関数をベアワードから区別することもできます。たとえば、ハッシュを添え字化する場合:$hash{shift}
はshift
要素を返し$hash{+shift}
、関数を呼び出してshift
値のハッシュ要素を返しますshift
。
間接構文
オブジェクト指向のPerlでは、通常、矢印構文を使用してオブジェクトのメソッドを呼び出します。
$object->method(LIST); # call `method` on `$object` with args `LIST`.
ただし、動詞を最初に置く間接表記を使用することは可能ですが、お勧めしません。
method $object (LIST); # the same, but stupid.
クラスは(構文上の意味で)それ自体の単なるインスタンスであるため、クラスのメソッドを呼び出すこともできます。これが理由です
new Class (ARGS); # bad style, but pretty
と同じです
Class->new(ARGS); # good style, but ugly
ただし、これによりパーサーが混乱する場合があるため、間接的なスタイルはお勧めしません。
しかし、それは印刷が何をするかについてのヒントを与えます:
print $fh ARGS
と同じです
$fh->print(ARGS)
実際、ファイルハンドル$fh
はクラスのオブジェクトとして扱われますIO::Handle
。
(これは有効な構文の説明ですが、完全には真実ではありません。ソースIO::Handle
自体は行を使用しprint $this @_;
ます。print関数はこのように定義されています。)