#!/usr/bin/env perl 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; }