對于perl編程你了解多少?武林小編我曾深入過,但知識點是學不完的,我也不斷的充實中,接下來就先附上這篇用perl編寫的單位電腦信息采集程序,需要學習這方面知識的小伙伴不妨看過來。
?
?
復制代碼 代碼如下:
?
主要用于收集ip、mac、姓名、房間,后來又加入了維修記錄的功能。服務器端接受數據并存入數據庫中。
#############################
use?strict;
use?Tk;
use?Encode;
#SOCKE參數
my?$PF_INET?=?2;
my?$port?=?2345;
my?$remote_addr?=?pack('SnC4x8',$PF_INET,$port,192,168,138,228);
my?$SOCK_DGRAM?=?2;
#Frame
my?($label_room,?$label_name,?$label_ctrl,?$label_notice);
#確定、取消
my?($enter,?$cancel);
#房間、姓名變量
my?($room,?$name);
$room?=?'';
$name?=?'';
#主界面
my?$mw?=?MainWindow->new(-title?=>?hanzi('信息收集'));
$mw->minsize(qw/200?100/);
$mw->maxsize(qw/200?100/);
#三個Frame
$label_room?=?$mw->Frame(?qw/-borderwidth?2?-relief?groove/?)->pack(?qw/-side?top?-fill?both/?);
$label_name?=?$mw->Frame(?qw/-borderwidth?2?-relief?groove/?)->pack(?qw/-side?top?-fill?both/?);
$label_ctrl?=?$mw->Frame(?qw/-borderwidth?2?-relief?groove/?)->pack(?qw/-side?top?-fill?both/?);
#房間號碼輸入
$label_room->Label(-text?=>?hanzi('房間號碼'))->pack(qw/-side?left?-expand?1/);
$label_room->Entry(-textvariable?=>?/$room,?-relief?=>?'groove')->pack(qw/-side?right?-expand?1/);
#姓名輸入
$label_name->Label(-text?=>?hanzi('姓名'))->pack(qw/-side?left?-expand?1/);
$label_name->Entry(-textvariable?=>?/$name,?-relief?=>?'groove')->pack(qw/-side?right?-expand?1/);
#確定與重置
$enter?=?$label_ctrl->Button(-text?=>?hanzi('確定'),?-command?=>?/&enter)->pack(qw/-side?left?-expand?1/);
$cancel?=?$label_ctrl->Button(-text?=>?hanzi('重置'),?-command?=>?/&cancel)->pack(qw/-side?right?-expand?1/);
#提示
$label_notice?=?$mw->Label(-text?=>?hanzi('歡迎使用'),?-relief?=>?'groove',?-background?=>?'#FFFF99')->pack(qw/-side?bottom?-fill?x/);
MainLoop();
#漢字解碼
sub?hanzi{
????return?decode('gb2312',?shift);????
}
#確定函數
sub????enter{
????chomp($room);
????chomp($name);
????$room?=~?s/^/s+//;
????$name?=~?s/^/s+//;
????if($room?eq?''?or?$name?eq?''){
????????$label_notice->configure(-text?=>?hanzi('輸入不能為空'))?;
????????return?0;
????}#if
????else{
????????open(IPCF,'-|',"ipconfig?-all");
????????my?($mac_addr,?$ip_addr,?$out_buffer);
????????while(){
????????????chomp;
????????????if($_?=?~s/(.*)(00(/-[0-9A-Z]{2}){5})(.*)/$2/){
????????????????$mac_addr?=?join('',?split(/-/,$_));
????????????}
????????????if($_?=?~/IP?Address/){
????????????????$_?=?~s/(.*)([0-9]{3}(/.[0-9]{1,3}){3})(.*)/$2/;
????????????????$ip_addr?=?$_;
????????????}
????????}#while
????????$out_buffer?=?$room."/t".$mac_addr."/t".$ip_addr."/t".encode('utf8',?$name);
????????socket(UDP_CLIENT,?$PF_INET,?$SOCK_DGRAM,?getprotobyname('udp'));
????????send(UDP_CLIENT,?$out_buffer,?0,?$remote_addr);
????????close(UDP_CLIENT);
????????close(IPCF);
????????$mw->destroy();
????}#else????????
}
#重置函數
sub?cancel{
????$label_notice->configure(-text?=>?hanzi('重置為空'));
????$room?=?'';
????$name?=?'';
}
?
用perl編寫的單位電腦信息采集程序就為各位說到這里,?如果有什么不清楚可以留言給我,如果覺得我寫得不錯的話,請給我一個大拇指,謝謝!