in reply to Re: Print every past three months from current month
in thread Print every past three months from current month

Hi, think if it was months, the count has to go backwards, and I can't get it to do it:
my @months = qw( January February March April May June July October No +vember December ); # passing 4 for April, I should get "February March April", instead I +get: "March April May". f(4); sub f { my $i = shift; print join(',', @months[$i-2, $i-1, $i]), "\n"; }

Thanks!

Replies are listed 'Best First'.
Re^3: Print every past three months from current month
by wazat (Monk) on Apr 01, 2014 at 16:11 UTC

    Remember that perl array indices start at zero. April would have index 3, not 4. Also you are missing August and September.

    my @months = qw( January February March April May June July August Sep +tember October November December ); f(3); # Apr f(0); # Jan f(11); # Dec sub f { my $i = shift; print join(',', @months[$i-2, $i-1, $i]), "\n"; }

    Output

    February,March,April November,December,January October,November,December
Re^3: Print every past three months from current month
by AnomalousMonk (Archbishop) on Apr 01, 2014 at 18:48 UTC
    c:\@Work\Perl\monks>perl -wMstrict -le "my %months_name = qw( 1 January 2 February 3 March 4 April 5 May 6 June 7 July 8 August 9 September 10 October 11 November 12 December ); ;; my @months = map $months_name{$_}, sort { $a <=> $b } keys %months_na +me; ;; for my $n (1 .. 12) { my @prev_3 = map $n-1+$_, -3 .. -1; @prev_3 = @months[ @prev_3 ]; print qq{(@prev_3) before $months_name{$n} (month $n)}; } " (October November December) before January (month 1) (November December January) before February (month 2) (December January February) before March (month 3) (January February March) before April (month 4) (February March April) before May (month 5) (March April May) before June (month 6) (April May June) before July (month 7) (May June July) before August (month 8) (June July August) before September (month 9) (July August September) before October (month 10) (August September October) before November (month 11) (September October November) before December (month 12)