2016-09-21 67 views
8

, 0 argümanını iletirse, bunu aramak için 4 form kullanabilirim. 1 veya daha fazla argüman ileterek, ben kullanamıyorum ki bir biçim varsa Ama, lütfen aşağıya bakın:söz dizimi `& name arg1 arg2 ...` Perl alt yordamını çağırmak için neden kullanılamaz? Bir Perl alt programı için

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"); 

hata çıkışı

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. 

birisi derleyici en hata çıkışını açıklayabilir bakış açısı? Eksik operatör hakkında neden şikayet ettiğini anlamıyorum.

Teşekkür

+3

Harika bir cevabınız var. Bunun için '&' kullanımı hakkında daha fazla tartışma için bkz. ['Bu gönderi '] (http://stackoverflow.com/questions/1347396/when-should-i-use-the-to-call-a- perl-subroutine) ve ['bu yazı '] (http://stackoverflow.com/questions/8912049/difference-between-function-and-function-in-perl) ve [' this post'] (http: //stackoverflow.com/questions/6706882/using-ampersands-and-parens-when-calling-a-perl-sub) ... ve muhtemelen başkaları da var. – zdim

+1

@zdim sadece merak ediyorum, neden bağlantıları kod işaretine koydunuz? – simbabque

+0

@simbabque Hah, iyi nokta. Sanırım daha belirgin, vurgulanmışlar. Gerçekten bilmiyorum. Asla bunu "kod biçimlendirmesi" olarak düşünmediniz (haklısınız, bu) - ama daha çok vurgulandığı gibi. – zdim

cevap

13

O perlsub belgelenmiştir oluyor:

altyordamlarını çağırmak için: o alt arasındaki kayıp bir operatör olduğunu düşünüyor bu yüzden

&NAME "arg" ile
 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" görür arama ve "ARG".

Perl 5'te, çoğu durumda &'a ihtiyacınız yoktur.