2011-03-22 45 views
0

變量範圍的一個非常簡單的問題。我在主循環中使用的主代碼中定義了一個變量。無法在循環內訪問變量(在perl中)

my $my_variable; 
while(<FILE>) { 
    ...using $my_variable 
} 
if ($my_variable) -> FAILS 

當我退出循環,並使用可變我得到一個錯誤:

Use of uninitialized value $my_variable 

即使我附上一個裸塊我遵循錯誤的變量。

{ 
    my $my_variable; 
    while(<FILE>) { 
     ...using $my_variable 
    } 
    if ($my_variable) -> FAILS 
} 

有什麼建議嗎?

+5

你能提供一個完整的例子,可以逐字複製顯示問題嗎?你使用嚴格嗎? – musiKk 2011-03-22 12:26:19

+0

我同意musiKk。更重要的是你使用'use strict;使用警告;'?如果不這樣做,看看它是否給你一些警告。 – 2011-03-22 14:03:50

+2

請提供可運行的真實代碼,並展示您所看到的錯誤。您的問題中的代碼無法運行,即使可以,也不會在您的問題中輸出警告消息。 – 2011-03-22 14:16:41

回答

1
  • 你在循環中使用$my_variable還是你重新定義爲my $my_variable某處循環。 my如何輕鬆進入變量賦值,您會感到驚訝。

    我甚至在我的代碼頻繁打勾,我喜歡寫東西

    my $hash{ $key } = ... some elaborate assignment; 
    
  • 而且,if不應該抱怨未初始化的變量。 undef =>布爾值爲false。

  • 我不擔心初始化我所有的變量 - 但它的關鍵是你學習如何使用undefs的心態。並且總是總是 USUW(use strict; use warnings),這樣變量在您不期望它們時不會被初始化。
+0

好吧,其實我有一個錯誤,搞亂了我的while循環內的過程。根據您的建議,我發現了這個錯誤並使腳本正常工作。謝謝你們! – green69 2011-03-22 16:13:02

+0

在while循環之外定義一個變量(用我的$ my_variable)並在while循環中使用它而不用重新定義它(沒有「my」),那麼甚至可以在循環外部使用$ my_variable的值。 – green69 2011-03-22 16:15:20

1

你曾經分配給$my_variable嗎?您所展示的只是一個聲明(my)和一個用法(if),但從未進行過任務。

0

在給出的例子中,你沒有初始化$my_variable,所以在while循環之後它是未定義的。

你可以在循環之前做my $my_variable = '';

+0

好吧,所以我不能嘗試在循環外部訪問$ my_variable(在循環內修改),因爲超出了範圍。那麼,我能做到嗎? – green69 2011-03-22 12:24:11

+1

如果在循環內修改'$ my_variable'(即分配一個定義的值),你可以在循環外使用它。你能告訴我們循環內的代碼嗎?可能你永遠不會分配一個定義的值。 – Toto 2011-03-22 12:28:32