gio001 has asked for the wisdom of the Perl Monks concerning the following question:

Hello, oh wise ones, forgive my simple question .... being new to the perl world. I have a file containing data like:
thousands of lines in the file. this is a DATE represented in julian, I guess, well I would like to process all the lines in the file and generate another output file with each original date translated into something like:
Fri Feb 13 14:28:46 2009
or possibly a format like
Fri 02 13 14 28 46 2009
I have been experimenting with this command on my AIX box:
perl -e 'use POSIX;print ctime(1234553326)'
yet I would not want to do a while loop executing this for each input one line at a time passing the input as a parameter to the ctime function and producing the output one line at a time, I am sure resource wise it is very bad!
I suspect what I am asking can probably be achieved in a single line of perl code!

So I am asking for your help, please answer when you get a chance.

Replies are listed 'Best First'.
Re: changing date format in and out
by mr_mischief (Monsignor) on Feb 14, 2009 at 00:14 UTC
    If you have thousands of Unix epoch times (which is what you sure appear to have -- the number of seconds since midnight January 1st 1970 UTC) then why do you think you can process them all without... well, processing them all? The loop over thousands will be simpler and take less time that you think.

    while ( <> ) { chomp; print (gmtime $_); }

    See localtime and gmtime, although there's nothing wrong with ctime().

      well I understand and I agree that I will have to execute in a loop, what I am trying to learn is a way to create the while loop inside the perl world and not issue thousands of invocations to perl from a straight unix ksh loop, if you understand what I mean.
      So can you please illustrate for me how can I structure an invocation statement(s) to perl with an incoming file name, an output file name and the real while loop as the core of what I will ask perl to execute for me?
      Thanks !
        The example that was given to you is the guts of what you are asking for.

        Take the code that was given to you by mr_mischief, and save it in a file (lets call it Then just pass your input file through that, ie:

        perl < infile > outfile
        Although, you will probably want to change the line:
        print (gmtime $_);
        to read:
        print scalar gmtime($_);
        Or alternatively, if you want your output in local time, then:
        print scalar localtime($_);
        Hope this helps,
        Abandon KSH