in reply to Human Readable Date

Global symbol "$s" requires explicit package name at /home/bishopjd/documents/Goomba line 35. Global symbol "$s" requires explicit package name at /home/bishopjd/documents/Goomba line 35. Execution of /home/bishopjd/documents/Goomba aborted due to compilation errors.

You changed the code in your question. In the original version of this post, before you edited it, the line, "my $s = stat( $farm );" wasn't there. And that's why you were getting a message saying that you hadn't properly declared $s. Now that you've updated your code, you should probably update what the error message is that you're now getting.

Update: And now you've changed it again, removing the error message that you originally posted, and simply stating the extremely vague "Nothing seems to work." How can we help you when you don't tell us exactly what it's doing. And how can we help when you change the question while we're responding?


Dave

Replies are listed 'Best First'.
Re^2: Human Readable Date
by FireyIce01 (Novice) on Jan 18, 2005 at 05:24 UTC
    I apologize, I've tried a couple things, and was working on the code as I was asking about it, if I can figure out myself, all the better, right? the lack of $s was because I was trying to put the results of the stat into an array and then take the date part and convert it to human readable date/time... that's what's not working... the rest of the code seems to do exactly what it needs... but I have 2 lines:
    printf "%s: Age [%s], size [%d]\n", $farm, ParseDateString("epoch $s-> +mtime()"), $s->size();
    Which gives me a blank area where it prints: Age [ ]

    And the other line
    printf "%s: Age [%s], size [%d]\n", $farm, $s->mtime(), $s->size();
    which prints the unix time in the age: Age [1106013532]

    so the question is why isn't it being formatted into a human readable date?

      Here's the problem, and you get credit for discovering what I believe to be a bug in Date::Manip (or its documentation).

      The documentation for Date::Manip correctly states that ParseDateString() will not correctly handle a raw number of seconds since epoch. Obviously, seconds since epoch is exactly what $s->mtime() is giving you. So you need a way of getting Date::Manip's ParseDateString() to recognize that what you're handing it is seconds since epoch.

      The POD for Date::Manip goes on to tell you how to do that:

      NOTE: One of the most frequently asked questions that I have gotten is how to parse seconds since the epoch. ParseDateString cannot simply parse a number as the seconds since the epoch (it conflicts with some ISO-8601 date formats). There are two ways to get this information. First, you can do the following:

      $secs = ... # seconds since Jan 1, 1970 00:00:00 GMT $date = &DateCalc("Jan 1, 1970 00:00:00 GMT",$secs);

      Second, you can call it directly as:

      $date = &ParseDateString("epoch $secs");

      You're attempting to use the second method, and at least for me on Win32 ActivePerl 5.8.6 with Date::Manip version 5.42, that second method simply doesn't work as advertised. It fails to convince Date::Manip that you've handed it a string of seconds since epoch, and the result is that ParseDateString doesn't know what it's looking at, and defaults to returning an empty string.

      I have gone on to confirm that at least the first method suggested in the documentation for Date::Manip does work. That is,

      printf "%s: Age [%s], size[%d]\n", $farm, DateCalc( "Jan 1, 1970 00:00:00 GMT",$s->mtime() ), $s->size();

      Try that on for size. ;)

      Update: Bug alert has been rescinded. See my followup below.


      Dave

        excellent! now how to get a space between the date and time...

        2005011717:58:52 is better than the unix time, but having at least a space between date and time would be useful... Perl ignores whitespace right?

        Aside: Not sure how I would submit the bug report, but you're more than welcome to