2011-03-22 67 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