#!/usr/bin/env perl use 5.010; use strict; use warnings; use Data::Dump 'pp'; use JSON; use File::stat; use Time::Piece; our $VERSION = '1.01'; local $/; # slurp my $source = readline; for ($source) { # cleanup s/\A\(// and s/\);?\s*\Z//; # empty callback next if /^\{/; # valid json # convert seperate variables to hash keys s/\A/{\n/; s/^caniuse\.(\w+) *= */"$1":/gm; s/;$/,/gm; s/,\s*\Z/\n}/; # fractions not supported by barekey s/(?<=[,{\n]) (\d*\.\d) (?=:['"])/"$1"/gx; # escapes not supported in singlequote s{: *\K'((?:[^\\']+|\\.)*)'}{ my $_ = $1; s/"/\\"/g; s/\\'/'/g; qq("$_"); }ge; } my $data = from_json($source, { allow_singlequote => 1, allow_barekey => 1, }); my $update = eval { stat(${^LAST_FH} // $ARGV)->mtime } or warn "Could not determine input time\n"; $data->{-date} = Time::Piece->new($update)->datetime; print pp($data); __END__ =head1 NAME mkcaniuse - Turn Javascript data into an equivalent Perl structure =head1 SYNOPSIS tools/mkcaniuse data.json >browser-support.inc.pl