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