OK, so looked into this.
Not an Apple problem, but a perl issue; apparently comments in the perl ctime.pl header
have been warning since 5.12:
;# ctime.pl is a simple Perl emulation for the well known ctime(3C) function.
#
# This library is no longer being maintained, and is included for backward
# compatibility with Perl 4 programs which may require it.
# This legacy library is deprecated and will be removed in a future
# release of perl.
So its absence is not a bug, but a deprecation that has been planned for a while,
and has suddenly 'happened' somewhere between 5.12 and 5.16.
According to this page:
http://search.cpan.org/~rjbs/perl-5.16.0/pod/perldelta.pod#Removed_Modules_and_P ragmata
..it says:
Several old perl4-style libraries which have been deprecated with 5.14 are now removed:
abbrev.pl assert.pl bigfloat.pl bigint.pl bigrat.pl cacheout.pl complete.pl ctime.pl dotsh.pl exceptions.pl fastcwd.pl flush.pl getcwd.pl getopt.pl getopts.pl hostname.pl importenv.pl lib/find{,depth}.pl look.pl newgetopt.pl open2.pl open3.pl pwd.pl shellwords.pl stat.pl tainted.pl termcap.pl timelocal.pl
..ctime.pl being part of that list.
Oh, great. Pff, I hate when languages just drop old syntax.
I wouldn't mind if it was a jump from 5.xx to 6.0, but It isn't even a major release of perl.
Anyway, sounds like they want us to change our code to use POSIX::ctime instead,
which is what I'll do.
But if you absolutely don't want to change old code, a possible workaround
for the missing ctime.pl is to run as root (at least for Mavericks 10.9.2 anyway):
1) cp /System/Library/Perl/5.12/ctime.pl /System/Library/Perl/5.16/
2) Comment out this line in the 5.16 copy, because it generates an error:
local($[) = 0;
Regarding that $[ change, that variable is no longer changeable and is always zero
(according to 'man perlvar'), so that line shouldn't be needed in 5.16 anyway.
With the above change in place, old code's use of ctime() works normally again, e.g.
# sw_vers
ProductName: Mac OS X
ProductVersion: 10.9.2
BuildVersion: 13C64
# perl -e 'require "ctime.pl"; print ctime(time());'
Thu Mar 6 13:11:36 2014
# date
Thu Mar 6 13:11:38 PST 2014
In my case I'll change my code to use POSIX::ctime(), as I'd rather do that than hack the OS files..