On Fri, Apr 02, 2004 at 04:44:48PM -0800, Charlotte Hee wrote:
> 
> 
> In my perl script I use the unix command 'date' to make a time stamp
> because eventually I want the date format to be DD-MON-YYYY, where DD is
> the number of the day (1-31), MON is the 3-char spelling of month (i.e.
> JAN), and YYYY is the 4-digit year. In this perl script I'm just testing
> for the date so the day and year aren't in this script.
> The date command returns the month as a two digit number which I pass to
> my routine. My routine then changes the two digit number into the
> corresponding 3-char letters for that month. I get an error message like
> 
>    Illegal octal digit '8'
>    Illegal octal digit '9'
> 
> when my routine uses the number 08 and 09. I don't understand what
> this error means. If I change my routine to use 8 and 9 I don't see this
> error message. The number for April is 04 and that doesn't seem to cause a
> problem. What is special about numbers 08 and 09?

Numbers starting with a zero are interpreted as octal numbers.  The
digits 8 and 9 are illegal in octal numbers.

perldoc perldata

> Here is the code:  ( thanks, Chee )
> 
> 
> #!/usr/local/bin/perl -w
> #
> 
> use strict;
> use vars qw($mm $mon);
> 
> $mm = `date +%m`;
> $mon = &convertMO($mm);
> 
> print "month is $mon\n";
> 
> exit;
> 
> sub convertMO {
>     my ($tmp) = @_;
>     my $xmon;
> 
>     if ( $tmp == 01 ){ $xmon = 'JAN'; }
>     if ( $tmp == 02 ){ $xmon = 'FEB'; }
>     if ( $tmp == 03 ){ $xmon = 'MAR'; }
>     if ( $tmp == 04 ){ $xmon = 'APR'; }
>     if ( $tmp == 05 ){ $xmon = 'MAY'; }
>     if ( $tmp == 06 ){ $xmon = 'JUN'; }
>     if ( $tmp == 07 ){ $xmon = 'JUL'; }
>     if ( $tmp == 08 ){ $xmon = 'AUG'; }  #<-- illegal error
>     if ( $tmp == 09 ){ $xmon = 'SEP'; }  #<-- illegal error
>     if ( $tmp == 10 ){ $xmon = 'OCT'; }
>     if ( $tmp == 11 ){ $xmon = 'NOV'; }
>     if ( $tmp == 12 ){ $xmon = 'DEC'; }
> 
>     return $xmon;
> }

Here is code which does the same in a slightly more perlish manner:

#!/usr/bin/perl
use warnings;
use strict;

{
    my @months = qw( JAN FEB MAR APR MAY JUN JUL AUG SEP OCT NOV DEC );
    sub month_to_string { $months[shift] }
}

my $month_numeric = (localtime)[4];
my $month_string  = month_to_string $month_numeric;

print "month is $month_string\n";

-- 
Paul Johnson - [EMAIL PROTECTED]
http://www.pjcj.net

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to