Perl の二重アンダースコアとは何ですか?
-
01-07-2019 - |
質問
私自身は Perl の知識があまりないのに、他の人の Perl コードを理解しようとしています。よろしくお願いします。
次のような Perl 関数に遭遇しました。
MyFunction($arg1,$arg2__size,$arg3)
の二重アンダースコア構文には意味がありますか? $arg2
, 、それとも2番目の引数の名前の一部にすぎないのでしょうか?
解決
Perl 変数名の内部で __ を使用することには特別な意味はありません。特に質問で引用した場合は、プログラマーの好みである可能性があります。Perl 変数の命名に関する詳細情報を確認できます。 ここ.
他のヒント
ほとんどの言語と同様、アンダースコアは識別子の一部にすぎません。特別な意味はありません。
でも、本当に Perl ですか?変数にはシジルはありません。さらに詳しい内容を投稿していただけますか?
インタプリタに関する限り、アンダースコアは識別子に使用できる文字の 1 つです。これは、複数単語の識別子を形成するための連結またはキャメルケースの代替として使用できます。
先頭のアンダースコアは、識別子がローカルでのみ使用されることを意味するためによく使用されます。 例えば モジュールのエクスポートされていない部分用。それは単なる慣習にすぎません。通訳は気にしません。
あなたの質問の文脈では、二重アンダースコアはプログラム的な意味を持ちません。二重アンダースコアは、Perl の限られた数の値に対して特別な意味を持ちます。最も顕著なのは、 __FILE__
& __LINE__
. 。これらは、シジル ($
, %
または @
) 引用符の外側でのみ補間されます。これらには、現在実行中のファイルの絶対パスと名前、および実行中の行が含まれます。『特殊リテラル』のセクションを参照してください。 パールデータ または Perl モンクに関するこの投稿
arg2__size は単なる変数の名前であると確信しています。
マークの答えはもちろん正しく、特別な意味はありません。
ただし、あなたの例は Perl にはまったく似ていないことに注意してください。Perl 変数は裸語ではありません。上のリンクからわかるように、彼らには印章があります。そして Perl には「関数」はなく、サブルーチンがあります。
したがって、どの言語について話しているのかについて混乱があるかもしれません。
インタプリタに「$arg2」が変数の名前であることを伝える必要があります。「$arg2__size」ではありません。このためには括弧を使用する必要があります。(この使用法はシェルで見られるものと似ています)。
これはmyFunction($ arg1、$ {arg2} __サイズ、$ arg3)に動作するはずです
--ビヌ