Term-Menus
view release on metacpan or search on metacpan
lib/Term/Menus.pm view on Meta::CPAN
eval {
$banner=$eval_banner_code->();
};
if ($@) {
if (10<length $@ && unpack('a11',$@) eq 'FATAL ERROR') {
if (wantarray) {
return '',$@
}
if (defined $log_handle &&
-1<index $log_handle,'*') {
print $log_handle $@;
close($log_handle);
}
if ($Term::Menus::fullauto) {
&Net::FullAuto::FA_Core::handle_error($@);
} else { die $@ }
} else {
if (wantarray) {
return '',$die.' '.$@
}
if (defined $log_handle &&
-1<index $log_handle,'*') {
print $log_handle $die.' '.$@;
close($log_handle);
}
if ($Term::Menus::fullauto) {
&Net::FullAuto::FA_Core::handle_error(
$die.' '.$@);
} else { die $die.' '.$@ }
}
}
} elsif (keys %{$Conveyed} || $picks_from_parent) {
$banner=&transform_pmsi($banner,
$Conveyed,$SaveMMap,$picks_from_parent);
} else {
chomp($banner);
}
if ($banner && ($banner=~/^&?(?:.*::)*(\w+)\s*[(]?.*[)]?\s*$/
&& grep { $1 eq $_ } list_module('main',$Term::Menus::fa_code)) &&
defined $picks_from_parent &&
!ref $picks_from_parent) {
my @banner=();
if ($banner!~/::/) {
$banner=~s/^[&]//;
eval "\@banner=main::$banner";
} else {
eval "\@banner=$banner";
}
$banner=join '',@banner;
}
return transform_mboi(transform_mbii(transform_mbir(
$banner,$Conveyed,$MenuUnit_hash_ref,
$log_handle),$numbor,$ikey,$input,
$MenuUnit_hash_ref,$Conveyed,$log_handle),$MenuUnit_hash_ref,
$Conveyed,$SaveMMap,$picks_from_parent,$log_handle);
}
sub Menu
{
#print "MENUCALLER=",(caller)[0]," and ",__PACKAGE__,"\n";<STDIN>;
#print "MENUCALLER=",caller,"\n";
my $MenuUnit_hash_ref=$_[0];
#print "WHAT IS THIS=",&Data::Dump::Streamer::Dump($MenuUnit_hash_ref)->Out(),"\n";
$MenuUnit_hash_ref->{Name}=&pw($MenuUnit_hash_ref);
my $select_many=0;
if (exists $MenuUnit_hash_ref->{Select}) {
if (exists $MenuUnit_hash_ref->{Select} &&
$MenuUnit_hash_ref->{Select} &&
$MenuUnit_hash_ref->{Select}=~/many/i) {
$select_many='Many';
$MenuUnit_hash_ref->{Select}={};
} elsif (exists $MenuUnit_hash_ref->{Select} &&
$MenuUnit_hash_ref->{Select} &&
$MenuUnit_hash_ref->{Select}=~/one/i) {
$MenuUnit_hash_ref->{Select}={};
}
} else {
$MenuUnit_hash_ref->{Select}={};
}
my $picks_from_parent=$_[1]||'';
my $log_handle='';
if ($picks_from_parent && -1<index $picks_from_parent,'*') {
$log_handle=$picks_from_parent;
$picks_from_parent='';
}
my $unattended=0;
if ($picks_from_parent=~/\](Cron|Batch|Unattended|FullAuto)\[/i) {
$unattended=1;
undef $picks_from_parent;
}
my $recurse = (defined $_[2]) ? $_[2] : 0;
my $FullMenu= (defined $_[3]) ? $_[3] : {};
my $Selected= (defined $_[4]) ? $_[4] : {};
my $Conveyed= (defined $_[5]) ? $_[5] : {};
my $SavePick= (defined $_[6]) ? $_[6] : {};
my $SaveMMap= (defined $_[7]) ? $_[7] : {};
my $SaveNext= (defined $_[8]) ? $_[8] : {};
my $Persists= (defined $_[9]) ? $_[9] : {};
my $parent_menu= (defined $_[10]) ? $_[10] : '';
my $no_wantarray=0;
if ((defined $_[11] && $_[11]) ||
((caller)[0] ne __PACKAGE__ && !wantarray)) {
$no_wantarray=1;
}
if (defined $_[12] && $_[12]) {
return '','','','','','','','','','','',$_[12];
}
if (defined $_[13] && $_[13]) {
$log_handle=$_[13];
}
my %Items=();my %negate=();my %result=();my %convey=();
my %chosen=();my %default=();my %select=();my %mark=();
my $pick='';my $picks=[];my %num__=();
my $display_this_many_items=10;my $die_err='';
my $master_substituted='';my $convey='';$mark{BLANK}=1;
my $show_banner_only=0;
my $num=0;my @convey=();my $filtered=0;my $sorted='';
foreach my $key (keys %{$MenuUnit_hash_ref}) {
if (4<length $key && substr($key,0,4) eq 'Item') {
$Items{substr($key,5)}=$MenuUnit_hash_ref->{$key};
}
}
$Persists->{unattended}=$unattended if $unattended;
my $start=($FullMenu->{$MenuUnit_hash_ref}[11])?
$FullMenu->{$MenuUnit_hash_ref}[11]:0;
############################################
# Breakdown the MenuUnit into its Components
############################################
# Breakdown Each Item into its Components
#########################################
my $got_item_flag=0;
while (++$num) {
$start=$FullMenu->{$MenuUnit_hash_ref}[11]||0;
@convey=();
unless (exists $Items{$num}) {
if (exists $MenuUnit_hash_ref->{Banner} && !$got_item_flag) {
$show_banner_only=1;
} else { last }
} else {
$got_item_flag=1;
}
if (exists $Items{$num}->{Negate} &&
!(keys %{$MenuUnit_hash_ref->{Select}})) {
my $die="Can Only Use \"Negate =>\""
."\n\t\tElement in ".__PACKAGE__.".pm when the"
."\n\t\t\"Select =>\" Element is set to \'Many\'\n\n";
&Net::FullAuto::FA_Core::handle_error($die)
if $Term::Menus::fullauto;
die $die;
}
my $con_regex=qr/\]c(o+nvey)*\[/i;
if (exists $Items{$num}->{Convey}) {
my $convey_test=$Items{$num}->{Convey};
if (ref $Items{$num}->{Convey} eq 'ARRAY') {
foreach my $line (@{$Items{$num}->{Convey}}) {
push @convey, $line;
}
} elsif (ref $Items{$num}->{Convey} eq 'CODE') {
my $convey_code=$Items{$num}->{Convey};
( run in 2.681 seconds using v1.01-cache-2.11-cpan-364913b4093 )