2011-01-28 8 views
1
私は現在、Perlプログラミングを勉強していますし、このような文に実行しています

カンマで区切られた操作はどのようにしてperlで動作しますか?

return bless { }, $type; 

私はreturn bless { };はどうなるのか知っている、と私は声明に影響を与えるもreturn $type;はどうなるのかを知っているが、どのようにカンマで区切っありませんすべての単項演算子で同じように動作しますか?

+4

は二つの変種があり祝福。示されている表記は 'return bless(REF、CLASSNAME);と同じです。 –

答えて

5

blessは単項演算子ではないので、$typeblessに渡されます(ここで、ハッシュリファレンスを祝福するクラスの名前として使用されます)。 returnに関する特別

唯一のものは

。その右側の式はリスト、スカラー、またはサブルーチンが呼ばれた文脈に応じて、無効コンテキストで評価されるかもしれないということであるcomma operatorはいずれも解釈されませんreturnステートメントでは、他の場所にあるステートメントとは異なります(ただし、returnステートメントを参照することで、リストまたはスカラーコンテキストにあるかどうかはわかりません)。

+0

したがって、カンマはすべて、リスト内の別々の要素です。 – chustar

+0

@chustar、 "スカラーコンテキストでは、左の引数を評価し、その値をスローし、次に右の引数を評価し、その値を返します。リストコンテキストでは、リスト内の項目を区切ります。 – cjm

2

事前定義されたPerl関数は、かっこ付きでもなくても呼び出すことができます。他の言語を使用している人の大部分は、キーワード/演算子のためにこれらの機能を混乱させます。

bless、undef、push、pop、shift、unshift、print、split、joinなどはすべて関数です。

したがって、これら二つは等価です:

return bless { }, $type; 
return bless({ }, $type); 

しかし、これら二つはありません: `、REFを祝福CLASSNAME`と` REF`を祝福:

print 2 * 3 + 2; # prints 8 
print(2 * 3) + 2; # prints 6 (with a warning if warnings pragma is on) 
+0

*宣言* Perl関数は、かっこ付きでもなくても呼び出すことができます。ビルトインはこの点で特別ではありません。 –

+0

あなたは正しいです、サブa {}; a 1,2;作品は1、2; sub a {}はそうではありません。 –

関連する問題