2013-04-04 62 views
1

如何讓Perl打印月份名稱而不是數字,例如:9應該顯示爲9月份。我希望下面的程序打印月份名稱而不是數字。如何打印拼寫出月份名稱而不是數字

#!/usr/bin/perl 

use strict; 
use warnings; 
use Date::Easter; 

print "Please enter a year"; 
chomp (my $year = <STDIN>); 

my ($m1, $d1) = easter ($year); 
my ($m2, $d2) = julian_easter ($year); 
my ($m3, $d3) = orthodox_easter ($year); 

print "Gregorian => Month: $m1 Day: $d1\n"; 
print "Julian => Month: $m2 Day: $d2\n"; 
print "Orthodox => Month: $m3 Day: $d3\n"; 

回答

4

我懶得去下載這個模塊,看看是否月份是從0到11或1到12。對於這一點,我假設月份是從0到11

最簡單的方法是創建月份名稱的數組:

my @month_list = qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); 

my ($m1, $d1) = easter ($year); 
my ($m2, $d2) = julian_easter ($year); 
my ($m3, $d3) = orthodox_easter ($year); 

print "Gregorian => Month: $month_list[$m1] Day: $d1\n"; 
print "Julian => Month: $month_list[$m2] Day: $d2\n"; 
print "Orthodox => Month: $month_list[$m3] Day: $d3\n"; 

如果有個編號從1到12,加上一個假的一個月到數組的開頭:

my @month_list = qw(Foo Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec); 
+0

你忘了日;) – squiguy 2013-04-04 02:20:33

+0

這是我的過敏。我討厭五月。 – 2013-04-04 14:36:24

+0

雅我注意到,當我添加的代碼,我剛剛添加可能在那裏:D ...雖然很大的幫助,雖然 – user218001 2013-04-05 02:01:09

5

我使用BUIL式POSIX模塊:

#!/usr/bin/perl 

use strict; 
use warnings; 
use Date::Easter; 
use POSIX qw(strftime); 

my %dispach_sub = (
    easter   => \&easter, 
    julian_easter => \&julian_easter, 
    orthodox_easter => \&orthodox_easter, 
); 

print "Please enter a year: "; 
chomp(my $year = <STDIN>); 

foreach my $key (keys %dispach_sub) { 

    print "[$key]\t"; 
    my ($month, $day) = $dispach_sub{$key}->($year); 
    print POSIX::strftime("Month: %B Day: %d", 
     0, 0, 0, $day, $month - 1, $year - 1900), 
     "\n"; 
} 
相關問題