useMIME::base64;
$decoded=decode_base64($encoded);
一个比较直接的解法是先做一点简单的转译,然後使用unpack()这个函数的``u''''格式:
tr#A-Za-z0-9 /##cd;#去除非base64字元
tr#A-Za-z0-9 /#-_#;#转换成uu码格式
$len=pack("c",32 0.75*length);#计算长度字元
printunpack("u",$len.
--------------------------------------------------------------------------------
如何根据使用者帐户名称自动合成email位址?
在支援getpwuid【UNIX系统呼叫】、$<这个变数,和Sys::Hostname模组(标准perl发行的一部分)的系统上,您可试试这样的做法:
useSys::Hostname;
$address=sprintf(''s@s'',getpwuid($<),hostname);
有的公司对email位址有统筹规画,因此这麽一来您可能会合成出不被公司的email主机接受的位址。所以如果有这类的顾虑的话,您应该直接向users要他们的email位址。而且,并不是所有能跑Perl的系统都像Unix一样,可以很容易得到这些资料。
CPAN里的Mail::Util模组(MailTools套件的一部分)中有一个mailaddress()函数,它会试着去猜user的email位址。这个函数使用比上面的code聪明的方法,它会参考安装时所得到的设定资料,但是错误仍可能发生。所以,再一次地,最好的方法通常是直接问user本人。
--------------------------------------------------------------------------------
我的程式如何送/读email?
送信:CPAN上头的Mail::Mailer模组(MailTools套件的一部分)只适合在Unix上使用,但利用到Net::SMTP的Mail::Internet模组则没有这个限制。读信:用CPAN上的Mail::Folder模组(MailFolder套件的一部分)或是用CPAN上头的Mail::Internet模组(也是MailTools套件的一部分)。
#送信
useMail::Internet;
useMail::Header;
#设定使用哪台主机
$ENV{SMTPHOSTS}=''mail.frii.com'';
#制作标头
$header=newMail::Header;
$header->add(''From'',''gnat@frii.com'');
$header->add(''Subject'',''Testing'');
$header->add(''To'',''gnat@frii.com'');
#制作本文
$body=''Thisisatest,ignore'';
#产生mail物件
$mail=newMail::Internet(undef,Header=>$header,Body=>\[$body]);
#送出
$mail->smtpsendordie;
--------------------------------------------------------------------------------
如何找出我的主机名/网域名/IP位址?
长久以来许多code都很草率地直接呼叫`hostname`这个程式来取得主机名。虽然这麽做很方便,但也同时增加了移植到其他平台上的困难。这是一个很典型的例子,在方便和可移植性之间作抉择,不论选哪一边,必须付出一些牺牲和代价。
Sys::Hostname这个模组(标准perl发行的一部分)可用来取得机器的名字,然後您便可利用gethostbyname()这个系统呼叫来找出该机的IP位址了(假定您的DNS运作正常)。
useSocket;
useSys::Hostname;
my$host=hostname();
my$addr=inet_ntoa(scalar(gethostbyname($name||''localhost'')));
至少在Unix底下,取得DNS网域名最简单的方法大概要算是直接从/etc/resolv.conf这个档案里面找。当然,这麽做的前提是resolv.conf这个档案的设定必须照惯例的格式,还有就是这个档案必先存在才行。
(Perl在非Unix系统下尚需要一有效的方法来测出机器和网域名)
--------------------------------------------------------------------------------
如何抓新闻讨论群的文章或群组名录?
使用Net::NNTP或News::NNTPClient模组,两者皆可自CPAN下载。这些模组让抓群组名录这类的差事变得这麽容易:
perl-MNews::NNTPClient
-e''printNews::NNTPClient->;new->list("newsgroups")''
--------------------------------------------------------------------------------
如何抓/丢FTP档案?
LWP
