I am trying to understand the use of "sub" in the second "foreach $daynum" loop in the code shown below. I know it's an anonymous sub, but can't figure out why it's needed, if it indeed is. I have read the perlref and perlsub documents, and googled for information, to no avail.

Some things I have noticed regarding the first and second "foreach $daynum" loops:

When I step through the first "foreach $daynum" loop with Komodo, it seems to hang on the "foreach" as each combination of $a and $b values is sorted. Stepping continues after everything is sorted. The resultant output file contains the following (as expected):

946684800|Holiday 1|Holiday 2
950486400|Holiday 3
954547200|Holiday 5
977702400|Holiday 7|Holiday 8

When stepping through the second "foreach $daynum" loop, it only takes one step before it continues on, so it appears to be faster. However, it also results in an extra key, for some reason. The resultant output file contains the following:

946684800|Holiday 1|Holiday 2
950486400|Holiday 3
954547200|Holiday 5
977702400|Holiday 7|Holiday 8
CODE(0x198f04c)

My questions:

(1) What should the "sub" be doing?

(2) Where is the "CODE(0x198f04c)" coming from?

TIA,
Dalton

#!/usr/bin/perl -w
use strict;

my $dayentry;
my $daynum;
my $dbrow;

my %dayinfo = (
    977702400 => [ "Holiday 7",
                   "Holiday 8" ],
    950486400 => [ "Holiday 3" ],
    946684800 => [ "Holiday 1",
                   "Holiday 2" ],
    954547200 => [ "Holiday 5" ],
);

open( DBFILE, ">dbfile1.txt" ) or die("Error: could not open \"dbfile1.txt\"\n" );

foreach $daynum (sort{$a<=>$b} keys %dayinfo ) {
    $dbrow = "$daynum";
    foreach $dayentry (@{$dayinfo{$daynum}}) {
        $dbrow = join('|',$dbrow,$dayentry);
    }
    # write new data to output file
    print( DBFILE "$dbrow\n" );
}
close( DBFILE );

open( DBFILE, ">dbfile2.txt" ) or die("Error: could not open \"dbfile2.txt\"\n" );

foreach $daynum (sort(sub{$a<=>$b}, keys %dayinfo)) {
    $dbrow = "$daynum";
    foreach $dayentry (@{$dayinfo{$daynum}}) {
        $dbrow = join('|',$dbrow,$dayentry);
    }
    # write new data to output file
    print( DBFILE "$dbrow\n" );
}
close( DBFILE );


-- 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