#!/usr/bin/perl use strict; use warnings; use 5.010; # JS String literals specs from # http://developer.mozilla.org/En/Core_JavaScript_1.5_Guide:Literals#String_Literals { my %subst = ( "\b" => '\\b', "\f" => '\\f', "\n" => '\\n', "\r" => '\\r', "\t" => '\\t', "\cK" => '\\v', q{"} => q{\\"}, q{'} => q{\\'}, q{\\} => q{\\\\}, map { $_ => $_ } 0..7 ); my $lastisnum; sub subst { my $s=$subst{local $_=shift}; ( ($lastisnum, undef) = /\d/ && $lastisnum || !defined $s ? (1, sprintf '\\%o', ord) : (0, $s) )[1]; } } ( my $s = do { use open IN => ':raw'; local $/; scalar <>; } ) =~ s { ([\"\'\\[:^print:]0-7]) }{ subst $1 }gsex; while (defined $s) { my ($c, $t); say +( ($c,$t) = $s =~ /(^.{60,}?)([\D].*)/ ) ? qq|'$c'+| : qq|'$s'|; $s=$t; } __END__