The Perl and Raku Conference 2025: Greenville, South Carolina - June 27-29 Learn more

#!perl
use 5.14.0;
use autodie;
use open ':std', ':encoding(UTF-8)';
my $sw = $ARGV[0];
my $encode = $sw eq '-e' ? 1
: $sw eq '-d' ? 0
: die "first arg must be -e or -d\n";
my $fn = $ARGV[1];
my $z = ZMachine::ZSCII->new;
if ($encode) {
my $content = do {
open my $fh, '<:encoding(UTF-8)', $fn;
local $/;
<$fh>;
};
my $zchars = $z->encode($content);
open my $fh, '>:raw', "$fn.zscii";
print {$fh} $zchars;
close $fh;
} else {
my $content = do {
open my $fh, '<:raw', $fn;
local $/;
<$fh>;
};
my $text = $z->decode($content);
open my $fh, '>:encoding(UTF-8)', "$fn.utf-8";
print {$fh} $text;
close $fh;
}