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

package Term::QRCode;
use strict;
our $VERSION = '0.01';
use Carp;
sub new {
my($class, %args) = @_;
bless {
text_qrcode => Text::QRCode->new(delete $args{params} || +{}),
white_text => colored(' ', delete $args{white} || 'on_white'),
black_text => colored(' ', delete $args{black} || 'on_black'),
%args,
}, $class;
}
sub plot {
my($self, $text) = @_;
croak 'Not enough arguments for plot()' unless $text;
my $arref = $self->{text_qrcode}->plot($text);
$self->_add_blank($arref);
$self->{stdoutbuf} = join "\n", map { join '', map { $_ eq '*' ? $self->{black_text} : $self->{white_text} } @$_ } @$arref;
}
sub _add_blank {
my($self, $ref) = @_;
unshift @$_, ' ' and push @$_, ' ' for @$ref;
unshift @$ref, [(' ') x scalar @{$ref->[0]}];
push @$ref, [(' ') x scalar @{$ref->[0]}];
}
1;
__END__
=head1 NAME
Term::QRCode - Generate terminal base QR Code
=head1 SYNOPSIS
use Term::QRCode;
print Term::QRCode->new->plot('Some text here.') . "\n";
=head1 DESCRIPTION
Term::QRCode is allows you to generate QR Code for your terminal.
=head1 METHODS
=over 4
=item new
$qrcode = Term::QRCode->new(%params);
The C<new()> constructor method instantiates a new Term::QRCode object.
Term::QRCode->new(
params => {}, # for Text::QRCode params
);
=item plot($text)
$text = $qrcode->plot("blah blah");
Create a QR Code text for terminal.
=back
=head1 AUTHOR
Kazuhiro Osawa E<lt>yappo <at> shibuya <döt> plE<gt>
=head1 ORIGINAL CODE
=head1 SEE ALSO
L<Text::QRCode>
=head1 REPOSITORY
Term::QRCode is Subversion repository is hosted at L<http://coderepos.org/share/>.
patches and collaborators are welcome.
=head1 LICENSE
This library is free software; you can redistribute it and/or modify
it under the same terms as Perl itself.
=cut