Just a Theory

Trans rights are human rights

Posts about Hacks

How Does DateTime Ignore CORE::GLOBAL::time?

For the life of me, I can’t figure out why this test fails. time returns my overridden time, and DateTime just calls scalar time, so I would expect it to work. But DateTime appears to be somehow getting the time for CORE::time, instead.

#!/usr/bin/perl -w

use strict;
use DateTime;
use Test::More tests => 1;

BEGIN {
    *CORE::GLOBAL::time = sub () { CORE::time() };
}

my $epoch = time;
sleep 1;
try();

sub try {
    no warnings qw(redefine);
    local *CORE::GLOBAL::time = sub () { $epoch };
    is( DateTime->now->epoch, time );
}

Anyone got any bright ideas? This is a reasonably well-known technique, so I’m sure that I must be overlooking something obvious.

Looking for the comments? Try the old layout.

The End of Civilization

It’s the end of civilization as we know it.

Looking for the comments? Try the old layout.