国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Perl > 正文

PerlCookbook2介紹

2019-11-18 17:22:38
字體:
來源:轉載
供稿:網友

摘要:SQL語言在標準數據庫以外的應用

問題:你想對一個非關系型數據庫結構進行復雜的SQL查詢。

解決:使用CPAN上的DBD::SQLite模塊

useDBI;$dbh=DBI->connect("dbi:SQLite:dbname=/Users/gnat/salaries.sqlt","","",{RaiseError=>1,AutoCommit=>1});$dbh->do("UPDATEsalariesSETsalary=2*salaryWHEREname='Nat'");$sth=$dbh->SQLite定義的數據庫里面沒有數據類型這個概念。不管你在創建一個表的時候指定的是什么數據類型,以后你可以在其中放入任何類型的數值(包括字符型,數字型,日期型,二進制對象/blob)。實際上,創建表的時候你甚至可以不指定數據類型。
CREATETABLEpeople(id,name,birth_year);
SQLite只有在要比較數據的時候,如用WHERE子句或對某些值進行排序,才會考慮數據類型。SQLite在比較數據的時候,只考慮被比較對象的類型,而不管被比較對象所在列的其它數據是什么類型。像Perl一樣,SQLite只能識別字符型和數字型。兩個數值總是以浮點類型進行比較,兩個字符串直接比較。當不同類型的數據比較的時候,數字總是比字符小。只有一種情況SQLite才會關心你為某一列申明的數據類型(需要創建一個值自增加的列的時候)。你可以把這列的類型指定為:“INTEGERPRIMARYKEY”。
CREATETABLEpeople(idINTEGERPRIMARYKEY,name,birth_year);
例子14-6說明這一切是怎么工作的
例14-6整形主鍵#!/usr/bin/perl-w#Word)=@$row;print"$wordhasid$id/n";}

SQLite支持8位長的字符編碼,但是不識別ASCII中的NULL符“/0”。唯一的變通方法就是在你存儲數據之前自行編碼,然后在取出數據之后再手工解碼,就象URL編碼或Base64編碼方式一樣。這甚至可以用在BLOB字段里面。

參照:“ExecutinganSQLCommandUsingDBI”CPAN上DBD::SQLite模塊的正式文檔。它在SQLite的主頁上photoshopped/nat.jpg',Filename=>'gnat-face.jpg');

$msg->attach(Type=>'TEXT',

Data=>'Ihopeyoucanusethis!');
 
最后,發送這份郵件,發送它的方法是可選的:
$msg->send();#默認的方法是用sendmail規則發送#指定其它的方法$msg->send('smtp','mailserver.example.com');

 

討論:

MIME::Lite模塊創建并發送帶MIME指定類型附件的郵件。MIME是MultimediaInternetMailExtensions的縮寫,而且也是在郵件中附帶各種文件文檔的標準方式。但是,這個規則并不能從郵件信息中把附件提取出來。如果你想從郵件信息中提取MIME指定類型附件,可以參考這篇文章“ExtractingAttachmentsfromMail”

當你創建MIME
::Lite對象,以及向創建的對象中添加內容的時候。后面的參數采用“參數名=>值”的有名對形式。有名對的參數名部分應該暗示它代表的郵件頭(如,From,To,Subject)以及其它其它MIME::Lite所特有的東西。如果參數名是郵件頭,后面應該加上冒號,如:
$msg=MIME::Lite->new('X-Song-Playing:'=>'NatchezTrace');

然而,當參數名代表的郵件頭在表18-2中時,后面可以不加冒號。下表中*代表通配符,例如Content-*可以代表Content-Type和Content-ID但是不代表Dis-Content

表18-2:MIME::Lite頭

ApprovedEncryptedReceivedSenderBccFromReferencesSubjectCcKeywordsReply-ToToCommentsMessage-IDResent-X-Content-*MIME-VersionReturn-PathDateOrganization

MIME::Lite參數類型的完整列表在表18-3中

表18-3:MIME::Lite參數類型

DataFHReadNowDatestampFilenameTopDispositionIdTypeEncodingLengthFilenamePath

MIME::Lite模塊的參數類型決定附件的類型和附件的添加方法:

Path指定作為附件的文件的路徑Filename指定接受方保存附件時,附件的默認文件名。如果指定了Path參數,那么默認的文件名就是路徑中的名字Data指定附件添加的日期Type指定待添加附件的文件編碼類型Disposition它的值只能是inline和attachment。前者指定接受方打開郵件的時候附件內容會跟在郵件正文后顯示,而不單獨作為一個附加物。后者指定接受方應該指定一個附件的解碼方法,并且保存附件,此時會有提示FH指定一個讀取附件的開放的文件句柄

這兒有幾個有用的附件編碼類型:TEXT代表text/plain,為Type的默認值;BINARY是application/octet-stream的縮寫;multipart/mixed表明郵件有附件;application/msword表明附件為微軟的Word文檔;application/vnd.ms-Excel表明附件為微軟的Excel文檔;application/pdf表明附件為PDF文檔;image/gif,image/jpeg,image/png分別指定GIF,JPEG,PNG文件;audio/mpeg指定MP3格式文件;video/mpeg指定MPEG格式影片;video/quicktime指定Quicktime格式文件。

發送郵件的唯一兩種方法是sendmail和Net::SMTP。調用send方法時,若第一個參數為“smtp”,則用Net::SMTP發送郵件。send的其它參數都傳給Net::SMTP。
#timeoutof30seconds$msg->send("smtp","mail.example.com",Timeout=>30);
如果你想創建多個MIME::Lite對象,也就是發送多附件,你可以把send作為類方法調用,此時默認發送方法會被替換。
MIME::Lite->send("smtp","mail.example.com");$msg=MIME::Lite->new(opts);#...$msg->send();#sendsusingSMTP

如果你要處理多個消息,用好ReadNow參數。它指定附件應該立即從文件或文件句柄中讀取發送,而不是在發送前轉化為字符串。

發送郵件不是MIME::Lite能做的唯一事情。你還可以用它把最后的郵件內容變成字符串:

$text=$msg->as_string;
print方法可以把消息的字符串形式寫入一個文件句柄自定的文件中:
$msg->print($SOME_FILEHANDLE);
例子18-3是一個發送郵件的程序,它把在命令行輸入的文件名作為附件例18-3:發送帶附件的郵件
#!/usr/bin/perl-w#mail-attachment-sendfilesasattachmentsuseMIME::Lite;useGetopt::Std;my$SMTP_SERVER='smtp.example.com';#可根據自己情況改變my$DEFAULT_SENDER='sender@example.com';#同上my$DEFAULT_RECIPIENT='recipient@example.com';#同上MIME::Lite->send('smtp',$SMTP_SERVER,Timeout=>60);my(o,$msg);#processoptionsgetopts('hf:t:s:',/o);$o{f}||=$DEFAULT_SENDER;$o{t}||=$DEFAULT_RECIPIENT;$o{s}||='Yourbinaryfile,sir';if($o{h}or!@ARGV){die"usage:/n/t$0[-h][-ffrom][-tto][-ssubject]file.../n";}#constructandsendemail$msg=newMIME::Lite(From=>$o{f},To=>$o{t},Subject=>$o{s},Data=>"Hi",Type=>"multipart/mixed",);while(@ARGV){$msg->attach('Type'=>'application/octet-stream','Encoding'=>'base64','Path'=>shift@ARGV);}$msg->send();

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 石屏县| 仲巴县| 襄城县| 望谟县| 龙川县| 黑龙江省| 普宁市| 开封县| 竹北市| 大渡口区| 衡水市| 万载县| 东安县| 塘沽区| 淄博市| 灵川县| 麦盖提县| 乌苏市| 加查县| 墨竹工卡县| 汶川县| 大竹县| 德兴市| 平泉县| 栾川县| 伽师县| 普宁市| 洛南县| 闵行区| 罗定市| 兰考县| 黔江区| 逊克县| 和政县| 罗田县| 喜德县| 南澳县| 垣曲县| 榕江县| 黎城县| 泰安市|