如何使用AGI函数SAY DIGITS并从Perl中的变量读取

时间:2014-04-25 15:42:05

标签: perl asterisk perl-module agi

Perl中的SAY DIGITS函数不会从包含Perl中执行的命令行的STDOUT结果的变量中读取,但是当我为变量赋值时它会起作用。

#!/usr/bin/perl
use strict;

my $Hour = qx(date "+%I"); 

print "SAY DIGITS $Hour \"\"\n";

extensions.conf文件:

exten => 222,1,Answer()
exten => 222,2,AGI(time.sh)
exten => 222,3,Hangup()

代码应告诉来电者当前时间。就这么简单。

2 个答案:

答案 0 :(得分:2)

qx(...)的返回值(以及反引号和readpipe通常会附加一个换行符,在下游使用它之前,您通常希望chomp该值。

my $Hour = qx(date "+%I"); 
chomp($Hour);

print "SAY DIGITS $Hour \"\"\n";

答案 1 :(得分:0)

您可能希望在CPAN上使用Lingua::ENG::Numbers模块。

Lingua :: ENG :: Numbers将数值转换为相应的英文字符串。

以下是如何使用它的示例:

#!/usr/bin/perl
use Lingua::ENG::Numbers;
my $hour       = 0 + qx(date "+%I"); 
my $minute     = 0 + qx(date "+%M");
my $hour_str   = "";
my $minute_str = "";


if(my $o = Lingua::ENG::Numbers->new($hour)) {
    $hour_str = $o->get_string;
};
if(my $o = Lingua::ENG::Numbers->new($minute)) {
    $minute_str = $o->get_string;
};

print "It's $hour_str $minute_str";

您将获得类似It's Seven Seventeen的输出(这是我的时区上的时间)。

如果您需要从中获取音频,可以通过espeak管道传输,这是一种用于英语和其他语言的语音合成器。

更新:啊,我明白了,所以SAY DIGITS已在Asterisk实施。