use strict;
use warnings;
use Getopt::Long;
my $data='';
my $level='L';
my $format='png';
my $light='255:255:255';
my $dark='0:0:0';
my $size=10;
my $res=GetOptions('data|d=s' => \$data,
'level|l=s' => \$level,
'format|f=s' => \$format,
'size|s=i' => \$size,
'light=s' => \$light,
'dark=s' => \$dark,
);
{
$level=uc($level);
if ($level !~ /\A[MLQH]\z/) {
$level='L';
}
}
$data = join(' ',@ARGV) unless $data;
if ($format eq 'txt') {
require Text::QRCode;
my $qr=Text::QRCode->new(
level=>$level,
mode=>'8-bit',
);
my $arr=$qr->plot($data);
print join "\n", map { join '', @$_ } @$arr;
} else {
require Imager::QRCode;
my $qr=Imager::QRCode->new(
size=>$size,
margin=>3,
level=>$level,
mode=>'8-bit',
lightcolor => Imager::Color->new(split ':',$light),
darkcolor => Imager::Color->new(split ':',$dark),
);
my $img=$qr->plot($data);
my $pid = open my $display, '|-', 'display'
or die "Can't start `display`: $!";
$img->write(type=>$format, fh=>$display);
close $display;
waitpid $pid,0;
}