0

重複の可能性:
& を使用して Perl サブルーチンを呼び出す必要があるのはいつですか?

私は Perl 開発に不慣れで、サンプル コードを試しているところです。

&LogIt() に出くわしました。ここで、基本的な質問がほとんどありません。エラー/メッセージをログファイルに記録するように、Googleから情報を取得しました。

&LogIt("Failed to create folder."); 

上記のコードで、「&」は何を表していますか? &LogIt() と LogIt() に違いや影響はありますか? 「フォルダーの作成に失敗しました」というメッセージはどこかに出力されますか? 誰がこのメッセージを使用しますか?

&LogIt() の基本を教えてください。

4

2 に答える 2

3

これは考古学的な価値があります。アンパサンドは、サブルーチンを呼び出すために使用されました。あなたはそのページですべての厄介な詳細を見つけるでしょう。

引き続き機能しますが、非常に特殊な状況(サブルーチンへの参照や、サブルーチンが定義されているかどうかの確認など)を除いて、使用しないでください。

とは同じことを意味するものではないことに注意してください&foo&foo()後者は括弧から引数を取ります(または、提供されていない場合はなし)。前者は引数で呼び出すことはできませんが、の現在の値を@_引数として取ります。したがって、次のチャンク:

@_ = ( 10, 20 ) ;
&foo( ) ;
&foo ;

sub foo { print "args=$_[0], $_[1]\n" ; }

次の出力が生成されます。

args=, 
args=10, 20
于 2012-10-15T09:56:31.717 に答える
0

関数の&前のは、単に$スカラーの前のように動作します。その特定の変数が何であるかを伝えるのは通訳者の印章です。

ただし、関数では、括弧がある場合は必要ありません。したがって&foo &foo()foo()ほぼ同じことを意味します。

それらの違いは、関数に渡される引数にあります。の呼び出しfoo()は引数を渡しません。の呼び出し&fooは、電流@_をfooに渡します。

明示的で印章を使用する利点は、()使用するときに空を省略できることです。例えば

&foo
foo()

foo引数をチェックしない場合、または電流が@_空の場合。

または、電話する必要があるfoo(@_)場合は、単に書くことができます

`&foo`

()ただし、オプションの括弧を持つ他の言語(私が知っている)はCOBOLだけであるため、多くのPerlプログラマーは、それが必要とされない状況でも使用する傾向があります。

コードベース全体を使用するかどうかを決定&し、それに固執するだけです!! そうしないと、読むのが混乱する(または煩わしい)可能性があります。

于 2012-10-15T09:55:31.843 に答える