您好,登錄后才能下訂單哦!
最近不小心翻到了買(mǎi)的很多年的《perl語(yǔ)言入門(mén)》,于是寫(xiě)了一個(gè)小腳本熟悉一下。寫(xiě)得可能有些冗余,但盡量規(guī)范(用了strict)。里面主要用到數(shù)組、hash、子程序,可能對(duì)初學(xué)者練習(xí)有幫助就貼出來(lái)了,這個(gè)程序目前沒(méi)有落地的功能,所有操作都存在內(nèi)存,退出程序就還原了。比較初級(jí)有大??梢岳@道,也可以隨意吐槽。
#!/usr/bin/perl -w #版本:1.0.1 #時(shí)間:2017-09-13 #作者:劉遠(yuǎn) #郵箱:centos@126.com use utf8; use 5.010; use strict; binmode(STDIN,':encoding(utf8)'); binmode(STDOUT,':encoding(utf8)'); #解決linux退格的問(wèn)題,windows下可能會(huì)不兼容 `stty erase ^H`; #初始定義一些書(shū)和一些會(huì)員名 my @books=('第一本Docker書(shū)','Perl語(yǔ)言入門(mén)','Head Python','Linux企業(yè)應(yīng)用案例精解'); my @vips=('鬼魂兒','牛頭','馬面'); my @books2=('圖書(shū)列表','圖書(shū)添加','圖書(shū)刪除','圖書(shū)查找'); my @vips2=('會(huì)員列表','會(huì)員添加','會(huì)員刪除','會(huì)員查找'); my @index=('圖書(shū)管理 ','會(huì)員管理 ','借還書(shū)管理','保存退出 '); my @bo_re=('借書(shū)','還書(shū)','借還書(shū)查找'); my @bo_re2=('按圖書(shū)','按會(huì)員'); my %book_vip; my $us; sub book_list{ say "\n---------------------"; for(0..$#books){ if($book_vip{$books[$_]}){ say "\e[31;1m",$_+1,". 《$books[$_]》($book_vip{$books[$_]})\e[0m"; }else{ say "\e[1m",$_+1,". 《$books[$_]》\e[0m"; } } say "總共書(shū)籍:",scalar @books,"本"; say "---------------------\n"; } sub book2_list{ for(0..$#books2){ say $_+1,". $books2[$_]"; } &input_num; given($us){ when(/1/) { &book_list } when(/2/) { &add_book } when(/3/) { &delete_book } when(/4/) { &search_book } default { die "【錯(cuò)誤】輸入正確的數(shù)字!!\n" } } &index_list; } sub vip_list{ for(0..$#vips){ say $_+1,". $vips[$_]"; } say "總共會(huì)員:",scalar @vips,"人"; say "---------------------\n"; } sub vip2_list{ for(0..$#vips2){ say $_+1,". $vips2[$_]"; } &input_num; given($us){ when(/1/) { &vip_list } when(/2/) { &add_vip } when(/3/) { &delete_vip } when(/4/) { &search_vip } default { die "【錯(cuò)誤】輸入正確的數(shù)字!!\n" } } &index_list; } sub bo_re_list{ for(0..$#bo_re){ say $_+1,". $bo_re[$_]"; } &input_num; given($us){ when(/^1$/) { &bo_book } when(/^2$/) { &re_book } when(/^3$/) { &bo_re2_list } default { die "【錯(cuò)誤】輸入正確的數(shù)字!!\n" } } &index_list; } sub bo_re2_list{ for(0..$#bo_re2){ say $_+1,". $bo_re2[$_]"; } &input_num; given($us){ when(/^1$/) { &vip_book("book") } when(/^2$/) { &vip_book("vip") } default { die "【錯(cuò)誤】輸入正確的數(shù)字!!\n" } } } sub index_list{ say "\e[1m=== 圖書(shū)館系統(tǒng) ===\e[0m"; for(0..$#index){ say "\e[1m||\e[34m",$_+1,". $index[$_]\e[0m","\e[1m||\e[0m"; } say "\e[1m=== 圖書(shū)館系統(tǒng) ===\e[0m"; &input_num; given($us){ when(/^1$/) { &book2_list } when(/^2$/) { &vip2_list } when(/^3$/) { &bo_re_list } when(/^4$/) { say "\e[33;1m保存功能尚未完成,請(qǐng)Ctrl+C退出腳本\e[0m";&index_list } default { die "【錯(cuò)誤】輸入正確的數(shù)字!!\n" } } } sub input_num{ my $user_select=''; while($user_select !~ /^\s*\d+\s*$/){ print "\e[1m請(qǐng)輸入對(duì)應(yīng)數(shù)字:\e[0m"; $user_select=<STDIN>; redo if $user_select !~ /^\s*\d+\s*$/; } $us=$user_select; } sub delete_book{ &book_list; &input_num; if($book_vip{$books[$us-1]}){ say "\e[31;1m《$books[$us-1]》未歸還,無(wú)法刪除!\e[0m"; return; }else{ my @remove_book=splice @books,$us-1,1; say "\e[31;1m !!! 已經(jīng)刪除圖書(shū) 《@remove_book》 !!!\e[0m"; } } sub add_book{ print "\e[1m輸入添加的圖書(shū)名稱:\e[0m"; chomp(my $new_book=<STDIN>); push @books,$new_book; say "\e[32;1m已經(jīng)添加圖書(shū)《${new_book}》!!!\e[0m"; } sub search_book{ print "\e[1m輸入圖書(shū)名稱:\e[0m"; chomp(my $s_book=<STDIN>); my @s_books=grep /$s_book/, @books; say "\n\e[1m查到書(shū)籍:"; if (@s_books){ for(@s_books){ say "\e[33;1m《$_》\e[0m" } }else{ say "\e[33;1m沒(méi)有查到/(ㄒoㄒ)/~~\e[0m\n" } } sub delete_vip{ &vip_list; &input_num; my $count=&vip_book("vip",$us); if($count){ say "\e[31;1m以上圖書(shū)未歸還,無(wú)法刪除!\e[0m"; return; }else{ my @remove_vip=splice @vips,$us-1,1; say "\e[31;1m !!! 已經(jīng)刪除會(huì)員【@remove_vip】 !!!\e[0m"; } } sub add_vip{ print "\e[1m輸入添加的會(huì)員姓名:\e[0m"; chomp(my $new_vip=<STDIN>); push @vips,$new_vip; say "\e[32;1m已經(jīng)添加會(huì)員【$new_vip】!!!\e[0m"; } sub search_vip{ print "\e[1m輸入會(huì)員姓名:\e[0m"; chomp(my $s_vip=<STDIN>); my @s_vips=grep /$s_vip/,@vips; say "\n\e[1m查到會(huì)員:"; if (@s_vips){ for(@s_vips){ say "\e[33;1m【$_】\e[0m" } }else{ say "\e[33;1m沒(méi)有查到/(ㄒoㄒ)/~~\e[0m\n" } } sub bo_book{ print "\e[1m輸入會(huì)員編號(hào):\e[0m"; chomp(my $vip_id=<STDIN>); say "\e[1m已選擇會(huì)員:\e[33m$vips[$vip_id-1]\e[0m"; print "\e[1m輸入圖書(shū)編號(hào):\e[0m"; chomp(my $book_id=<STDIN>); if($book_vip{$books[$book_id-1]}){ say "\e[31;1m《$books[$book_id-1]》已被$book_vip{$books[$book_id-1]}借出\e[0m"; }else{ say "\e[1m已選擇圖書(shū):\e[33m《$books[$book_id-1]》\e[0m"; $book_vip{$books[$book_id-1]}=$vips[$vip_id-1]; say "\e[33;1m借書(shū)成功!!!\e[0m"; } } sub re_book{ print "\e[1m輸入圖書(shū)編號(hào):\e[0m"; chomp(my $book_id=<STDIN>); if($book_vip{$books[$book_id-1]}){ my $bo_vip=$book_vip{$books[$book_id-1]}; delete $book_vip{$books[$book_id-1]}; say "\e[33;1m$bo_vip《$books[$book_id-1]》還書(shū)成功!!\e[0m"; }else{ say "\e[33;1m《$books[$book_id-1]》沒(méi)有被借出\e[0m" } } sub vip_book{ my ($in,$id); my $count=0; print "\e[1m輸入圖書(shū)編號(hào):\e[0m" if ($_[0] eq "book") && (! $_[1]); print "\e[1m輸入會(huì)員編號(hào):\e[0m" if $_[0] eq "vip" && (! $_[1]); chomp( $id=<STDIN>) if (! $_[1]); chomp( $id=$_[1]) if ($_[1]); $in = ($books[$id-1]) if $_[0] eq "book"; $in = ($vips[$id-1]) if $_[0] eq "vip"; say "\e[1m沒(méi)有找到該圖書(shū)\e[0m\n" if (! $in) && ($_[0] eq "book"); say "\e[1m《$in》沒(méi)有被借出\e[0m\n" if ($in) && ($_[0] eq "book") && (! $book_vip{$in}); say "\e[31;1m沒(méi)有找到該會(huì)員\e[0m\n" if (! $in) && ($_[0] eq "vip"); while(my ($bobook,$bovip)=each %book_vip){ if($in eq $bobook && $_[0] eq "book"){ say "\e[33;1m《$in》由${bovip}借出\e[0m" } if($in eq $bovip && $_[0] eq "vip"){ say "\e[33;1m【${in}】借出《$bobook》\e[0m";$count+=1 } } say "\e[33;1m${in}沒(méi)有借過(guò)書(shū)\e[0m" if ($in) && ($_[0] eq "vip") && ($count == 0); $count; } &index_list
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。