以下的两个PERL编程技巧可以帮助你更方便地操作和移动数据。让我们首先看看如何把UNICODE编码转换为ASCII字符编码。然后我们会教你一招把数据直接写入FTP服务器而无须事先创建用来传输数据的文件。
UNICODE在编程的圈子里越来越普及了,这在很大程度上是因为有了它数据交流就可以轻松地跨越语言障碍。出于数据处理的目的,你需要一些工具程序在UNICODE和ASCII编码之间来回转换,以下就是两个完成该功能的简短子程序:
sub MakeUNICODE {
my ($d) = @_;
$d =~ s/(.)/x00/g;
return $d;
}
sub MakeASCII {
my ($d) = @_;
$d =~ s/(.)x00//g;
return $d;
}
你可能会把 $d 设为局部变量$_[0] 以获得更快的处理速度,但是以上的程序可读性要好一些。不过提醒你注意:只有前面的255个UNICODE字符可以映射ASCII字符表,所以许多UNICODE字符是不能转换的。
在通常的情况下,当你连接FTP服务器时,你也就是完成下载或者上载文件这类操作。但也不尽然。比方说,你可能会打算更新远程服务器上的一个日志文件,这个文件没有存储在本地,你不想访问该文件或者不愿意仅仅出于给FTP服务器移动数据的目的就创建这样的文件。
解决方案是创建一个连接FTP服务器的套接字(socket),然后把数据直接写入到服务器而不采取创建传输文件的中间步骤。以下的程序代码可以让你在不编写文件的情况下直接把数据写到某个FTP站点:
use Net::FTP;
# 以下的代码假设$host、$user和$password都已经赋值
$ftp = Net::FTP->new($host) or die $!;
$ftp->login($user,$password) or die $!;
$sock = $ftp->_data_cmd('stor', "logfile") or die $!;
# log file will be written to on the server
while( <DATA> ){
$sock->write($_,length) or die $!;
}
$sock->close() or die $!;