昨天我一直在用perl编写简单的程序。
这是icq bot,你把一条消息写成数学表达式并计算出值。
问题是传入的消息没有单字节编码和写入时 文件有很多坏符号,当然calc无法处理这个文件。
如何将传入的消息转换为ASCII?
以下是来源:
#!/usr/bin/perl
use Net::OSCAR;
use Encode;
use strict;
my ($UIN, $PASSWORD, $oscar, $t, $msg);
$UIN='675349295';
$PASSWORD='passwd';
$oscar = Net::OSCAR->new();
$oscar->set_callback_im_in(\&send_answer);
$t = 0;
while (1)
{
if (!$oscar->is_on && (time() - $t) > 120)
{
$oscar->signon($UIN, $PASSWORD);
$t=time();
}
$oscar->do_one_loop();
}
sub send_answer()
{
my($oscar, $sender, $msg) = @_;
if ($msg eq "quit")
{
$oscar->signoff();
exit();
}
open(my($fh), '>', '/tmp/msg');
print $fh "$msg";
close $fh;
my($ans)=`calc -p -f /tmp/msg`;
$oscar->send_im($sender, $ans);
}