2016-04-05 24 views
1

ifadesinde açık paket adını gerektirir Bir ay adını alması ve eşleşiyorsa bir sayı döndürmesi durumunda Perl alt yordamı yazdım, aksi halde orijinal argümanı geri almam.değişkeni

syntax error at additionalscripts.pl line 16, near "}" 
Global symbol "$input" requires explicit package name at additionalscripts.pl li 
ne 19. 
syntax error at additionalscripts.pl line 20, near "}" 
Execution of additionalscripts.pl aborted due to compilation errors. 

bu zaten $ ilan ettik nasıl göz önünde gerçekleşiyor neden tam olarak emin değilim: Padre'ye bu derleme yaparken

sub convert_month_to_number { 
my ($input) = @_; 
my @month_names = qw/January February March April May June July August September October November December/; 
my @month_names_short = qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/; 
for (my $i = 0; $i < scalar(@month_names); $i = $i + 1){ 
    print "$month_names[$i]\n"; 
    if ($input == $month_names[$i]{ 
     return $i; 

    } 
} 

return $input; 
} 

} Ancak

, ben hata alırsınız yukarıdan küresel bir değişken olarak girdi. Herhangi bir yardım büyük takdir edilecektir. Şu anda Windows'ta Perl 5.010 kullanıyorum.

+1

OT: eq' 'dizelerle karşılaştırın. – Biffen

+1

'If' satırı eksik bir ')' gibi görünüyor. – Biffen

+0

Tüm satırları YANIT DIŞINDA BIRAKIN, çünkü ayrıştırıcının takılı kalmasından kaynaklanır. ** extscripts.pl satır 16, "}" yakınında sözdizimi hatası ** bunu düzeltin. –

cevap

0

Kodunuzda temizlediğim birkaç hata yaptınız.

my @test = qw(Foo January Bar); 
say convert_month_to_number($_) foreach @test; 

sub convert_month_to_number { 
    my ($input) = shift; 
    my @month_names = qw/January February March April May June July August September October November December/; 
    my @month_names_short = qw/Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec/; 

    for (my $i = 0; $i < @month_names; $i++){ 
     if ($month_names[$i] eq $input){ 
      return $i; 
     } 

    } 
    return $input; 

}