如何在Perl中使用AGI函数说出数字并读取变量

如何在Perl中使用AGI函数说出数字并读取变量,perl,asterisk,perl-module,agi,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 => 22

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()

代码应该告诉调用方当前时间。就这么简单。

qx(…)的返回值和backticks,通常有一个换行符附加在它后面,您通常希望在下游使用它之前
先选择该值

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

print "SAY DIGITS $Hour \"\"\n";
您可能希望在CPAN上使用该模块

Langua::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 Seven
(这是我所在时区的时间)

若你们需要从那个里获取音频,你们可以通过管道将其传送到一个用于英语和其他语言的语音合成器


更新:啊,我明白了,所以
说数字
已经在星号中实现。

是的,说数字已经是AGI中的一个函数。无论如何,谢谢你的帮助。