1
do
{
    print"CHOOSE ANY OF THE FOLLOWING OPTIONS:\n";
    print"==========================================\n";
    print"1-LOGIN & LOGOUT\n";
    print"2-MAKE CALL\n";
    print"3-EXIT\n";
    print"==========================================\n";
    print("\nENTER YOUR OPTION: ");
    $option=<>;
    if($option==1)
    {
        print("IN THE LOGIN & LOGOUT SCENARIO\n");
        &Login_logout();
    }
    elsif($option==2)
    {
        print("IN THE MAKE CALL SCENARIO\n");
    }
    elsif($option==3)
    {
        print("\nEXITING...\n");
        exit(0);
    }
    else
    {
        print"\nINSERT A VALID OPTION...!!!\n";
    }
}while(1);

Here the subroutine Login_logout() calls a SIPp instance(command line instance). After the successful completion of the command line instance the the scalar $option takes some garbage value and hits the else condition and prints the line "INSERT A VALID OPTION...!!!". This process continues infinetly until force closing the Konsole.

Can anybody tell me where I am wrong in the script.

4

3 回答 3

2

请记住,它<>需要一行而不是一个字符串,因此需要删除返回(CR/LF 等)。

...
$option=<>;
chomp $option; ## chomp removes the tailing return
if($option eq '1')
...
于 2012-02-10T06:01:18.650 回答
1

我认为您的外部程序调用修改/重定向 STDIN 的问题是读取一些垃圾。

设置自动刷新:

$|=1;

如果您在外部调用中不需要标准输入/标准错误,请像这样显式关闭它或将其重定向到文件:

`sip.sh >&- 2>&- <&-`

或仅关闭标准输入

`sih.sh <&-`

如果我是正确的,这个技巧只适用于最近的 ksh 和 bash。至少在 ksh 下:-)

问候,

于 2012-02-10T10:19:03.673 回答
-1

do { }while(1);这只是无限循环,没有条件检查,所以它将无限循环,更多尝试使用$option=<STDIN>;

于 2012-02-10T05:36:38.387 回答