2016-09-21 7 views
8

Perlサブルーチンの場合、0引数を渡すと、4つのフォームを使用して呼び出すことができます。しかし、1つの以上の引数を渡し、私が使用することはできません一つの形態がある場合には、下記を参照してください。なぜ `&name arg1 arg2 ...`という構文を使ってPerlサブルーチンを呼び出せないのですか?

sub name 
{ 
    print "hello\n"; 
} 
# 4 forms to call 
name; 
&name; 
name(); 
&name(); 

sub aname 
{ 
     print "@_\n"; 
} 
aname "arg1", "arg2"; 
#&aname "arg1", "arg2"; # syntax error 
aname("arg1", "arg2"); 
&aname("arg1", "arg2"); 

エラー出力が

String found where operator expected at tmp1.pl line 16, near "&aname "arg1"" 
    (Missing operator before "arg1"?) 
syntax error at tmp1.pl line 16, near "&aname "arg1"" 
Execution of tmp1.pl aborted due to compilation errors. 

誰かがコンパイラのからのエラー出力を説明できています視点?なぜ私は演算子が不足していることについて不平を言うのか分からない。

おかげ

+3

あなたはすばらしい答えを得ています。このために '&'の使用についてさらに議論するには、['this post'](http://stackoverflow.com/questions/1347396/when-should-i-use-the-to-call-a- perl-subroutine)と['this post'](' 'post'')(http://stackoverflow.com/questions/8912049/difference-between-function-and-function-in-perl) //stackoverflow.com/questions/6706882/using-ampersands-and-parens-when-calling-a-perl-sub)...おそらく他のものがあります。 – zdim

+1

@zdimちょっと疑問に思うのですが、どうしてリンクをコードマークアップに入れましたか? – simbabque

+0

@simbabqueハ、良い点。彼らがより目に見えるように、強調されていると思います。本当に知りません。決して実際にはそれを "コードマークアップ"(あなたが正しい、それです)として考えたことはありません。 – zdim

答えて

13

perlsubに記載されます:サブルーチンを呼び出すには

を:&NAME "arg"

 NAME(LIST); # & is optional with parentheses. 
     NAME LIST;  # Parentheses optional if predeclared/imported. 
     &NAME(LIST); # Circumvent prototypes. 
     &NAME;   # Makes current @_ visible to called subroutine. 

、perlは&NAME() "ARG"を見ているので、サブの間で演算子がありませんが、そこだと思っARG "と呼ぶ。

ほとんどの場合、Perl 5では、&は必要ありません。

関連する問題