The Questions
perlfaq1: General Questions About Perl
perlfaq2: Obtaining and Learning about Perl
perlfaq3: Programming Tools
perlfaq4: Data Manipulation
perlfaq5: Files and Formats
perlfaq6: Regular Expressions
perlfaq7: General Perl Language Issues
perlfaq8: System Interaction
perlfaq9: Networking
####
Found in /System/Library/Perl/5.10.0/pods/perlfaq4.pod
How can I find the Julian Day?
(contributed by brian d foy and Dave Cross)
You can use the "Time::JulianDay" module available on CPAN. Ensure
that you really want to find a Julian day, though, as many people have
different ideas about Julian days. See
http://www.hermetic.ch/cal_stud/jdn.htm for instance.
You can also try the "DateTime" module, which can convert a date/time
to a Julian Day.
$ perl −MDateTime −le'print DateTime−>today−>jd'
2453401.5
Or the modified Julian Day
$ perl −MDateTime −le'print DateTime−>today−>mjd'
53401
Or even the day of the year (which is what some people think of as a
Julian day)
$ perl −MDateTime −le'print DateTime−>today−>doy'
30
##
##
map BLOCK LIST
map EXPR,LIST
Evaluates the BLOCK or EXPR for each element of LIST (locally
setting $_ to each element) and returns the list value composed
of the results of each such evaluation. In scalar context,
returns the total number of elements so generated. Evaluates
BLOCK or EXPR in list context, so each element of LIST may
produce zero, one, or more elements in the returned value.
@chars = map(chr, @nums);
translates a list of numbers to the corresponding characters.
And
%hash = map { get_a_key_for($_) => $_ } @array;
is just a funny way to write
%hash = ();
foreach (@array) {
$hash{get_a_key_for($_)} = $_;
}
Note that $_ is an alias to the list value, so it can be used
to modify the elements of the LIST. While this is useful and
supported, it can cause bizarre results if the elements of LIST
are not variables. Using a regular "foreach" loop for this
purpose would be clearer in most cases. See also "grep" for an
array composed of those items of the original list for which
the BLOCK or EXPR evaluates to true.
If $_ is lexical in the scope where the "map" appears (because
it has been declared with "my $_"), then, in addition to being
locally aliased to the list elements, $_ keeps being lexical
inside the block; that is, it can’t be seen from the outside,
avoiding any potential side‐effects.
"{" starts both hash references and blocks, so "map { ..."
could be either the start of map BLOCK LIST or map EXPR, LIST.
Because perl doesn’t look ahead for the closing "}" it has to
take a guess at which its dealing with based what it finds just
after the "{". Usually it gets it right, but if it doesn’t it
won’t realize something is wrong until it gets to the "}" and
encounters the missing (or unexpected) comma. The syntax error
will be reported close to the "}" but you’ll need to change
something near the "{" such as using a unary "+" to give perl
some help:
%hash = map { "\L$_", 1 } @array # perl guesses EXPR. wrong
%hash = map { +"\L$_", 1 } @array # perl guesses BLOCK. right
%hash = map { ("\L$_", 1) } @array # this also works
%hash = map { lc($_), 1 } @array # as does this.
%hash = map +( lc($_), 1 ), @array # this is EXPR and works!
##
##
use strict;
use warnings;
use diagnostics;