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;