# # Copyright (c) 2003-2015 Christian Jaeger, copying@christianjaeger.ch # # This is free software, offered under either the same terms as perl 5 # or the terms of the Artistic License version 2 or the terms of the # MIT License (Expat version). See the file COPYING.md that came # bundled with this file. # =head1 NAME Chj::Util::AskYN =head1 SYNOPSIS use Chj::Util::AskYN; LP: { if (maybe_askyn "Do you want to retry?") { redo LP; } } =head1 DESCRIPTION Simply ask for a boolean question on stdout/stdin. Accept y/n, yes/no in english, german and french and return those as boolean true/false. If the user closes the input (using ctl-d), undef is returned. =head1 TODO Delete this and use something else? =head1 NOTE This is alpha software! Read the status section in the package README or on the L. =cut package Chj::Util::AskYN; @ISA="Exporter"; require Exporter; @EXPORT= qw(maybe_askyn); use strict; use warnings; use warnings FATAL => 'uninitialized'; sub maybe_askyn { my ($maybe_prompt)=@_; local $|=1; ASK:{ if (defined $maybe_prompt) { print $maybe_prompt; } print " "; my $ans=; if (defined $ans) { if ($ans=~ /^n(?:o|ein|ada|on)?$/i) { '' } elsif ($ans=~ /^(?:ja|yes|j|y|oui)$/i){ 1 } else { print "Please answer with yes or no or their initials, ". "or the same in french or german.\n"; redo ASK; } } else { # EOF, i.e. ctl-d print "\n"; undef } } } 1