2012-02-10 24 views
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); 

這裏子例程Login_logout()調用一個SIPp實例(命令行實例)。在成功完成命令行實例之後,標量$選項會獲取一些垃圾值並觸及else條件並打印行「INSERT A VALID OPTION ... !!!」。這一過程繼續進行,直到Konsole結束。在Perl中調用命令行實例時在循環中採用垃圾值變量

有人可以告訴我腳本中我錯了嗎?

+0

$ option需要一些垃圾值?什麼垃圾值? – zpmorgan 2012-02-10 05:38:04

+0

不知道需要什麼,我試圖將其打印出來,但沒有顯示任何內容。可能在命令行退出時返回一些值,$選項將它作爲$ ARG [0]值。我可能不確定。 – Shantanu 2012-02-10 06:06:52

+0

我試過你的代碼(移除了對'Login_logout()')的調用,它對我來說工作正常。 'Login_logout()'做了什麼?你能否更新你的文章以包含其來源? – 2012-02-10 06:43:21

回答

1

我認爲你的外部程序調用修改/重定向STDIN的問題,這樣它讀取一些垃圾。

設置自動沖洗:

$|=1; 

如果你不需要在你的外部調用標準輸入/標準錯誤,密切明確像這樣或重定向到一個文件:

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

或接近剛stdin

`sih.sh <&-` 

如果我是正確的這個技巧只適用於最近的ksh和bash。至少在ksh下:-)

問候,

+0

感謝人第二招。 – Shantanu 2012-02-10 13:06:42

+0

@Shantanu:這不應該成爲你問題的答案嗎? – flesk 2012-02-10 13:33:15

-1

do { }while(1);這不過是無限循環而已,沒有條件檢查,因此它會循環使用$option=<STDIN>;

+0

但是它仍然應該等待用戶在語句 $ option = <> 中輸入if-else語句。 而且我也嘗試過$ option = 而不是簡單的$ option = <>。但沒有解決。循環無需等待用戶輸入即可無限運行。 – Shantanu 2012-02-10 05:44:43

+0

嘗試把你的代碼放在'if($ option =〜m/^ \ d + $ /)',你只接受整數..''$ option = ; if($ option =〜m/^ \ d + $ /) {if($ option == 1)\t {print(「在登錄和退出情景中\ n」);&Login_logout();} ..... – run 2012-02-10 06:46:06

+0

有條件檢查,如果選項== 3它退出 – user1126070 2012-02-10 10:33:59

2

記住<>需要一個線而不是一個字符串無限,更過嘗試,以便消除回報率(CR/LF,等等)是必要的。

... 
$option=<>; 
chomp $option; ## chomp removes the tailing return 
if($option eq '1') 
... 
+0

雖然'chomp($ option = <>)'通常是個好主意,但在這種情況下不是必須的。 – flesk 2012-02-10 09:19:03