2013-04-04 48 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"; 
} 
相关问题