Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl,在循环的内部使用变量,而在循环的外部使用变量?_Perl_Variables_Loops_Scope_While Loop - Fatal编程技术网

Perl,在循环的内部使用变量,而在循环的外部使用变量?

Perl,在循环的内部使用变量,而在循环的外部使用变量?,perl,variables,loops,scope,while-loop,Perl,Variables,Loops,Scope,While Loop,这看起来很简单,但由于我是perl新手,所以很难理解。。我已经看过很多关于循环的文档了,我仍然被这个问题难住了。。。我有一个包含while循环的sub,我想在循环之外的循环中使用一个变量值(在循环运行之后),但是当我尝试打印出变量或从sub返回变量时,它不起作用,只有在从循环中打印变量时它才起作用。。如果你能告诉我我做错了什么,我将不胜感激 不工作(不打印$test): subtestthis{ $i=1; 而($i您在循环内声明变量test,因此它的作用域是循环,一旦您离开循环,变量就不再声明

这看起来很简单,但由于我是perl新手,所以很难理解。。我已经看过很多关于循环的文档了,我仍然被这个问题难住了。。。我有一个包含while循环的sub,我想在循环之外的循环中使用一个变量值(在循环运行之后),但是当我尝试打印出变量或从sub返回变量时,它不起作用,只有在从循环中打印变量时它才起作用。。如果你能告诉我我做错了什么,我将不胜感激

不工作(不打印$test):

subtestthis{
$i=1;

而($i您在循环内声明变量test,因此它的作用域是循环,一旦您离开循环,变量就不再声明。

my$test;
添加到
$i=1
while(…)
之间,它将起作用。作用域现在将是整个子循环,而不仅仅是循环

my$test
放在while循环之前。请注意,它将只包含在while循环中分配的最后一个值。这就是您想要的吗

// will print "it's working" when 'the loop is hit at least once,
// otherwise it'll print "it's not working"
sub testthis {
    $i = 1;
    my $test = "it's not working";

    while ($i <= 2) {
        $test = "it's working";
        $i++ ;
    }
    print $test ;
}
//将在“循环至少命中一次”时打印“它正在工作”,
//否则它会打印“它不工作”
子测试此{
$i=1;
my$test=“它不工作”;
而($i你可以试试这个:

sub testthis {
my $test
$i = 1;
while ($i <= 2) {

$test = 'its working' ;

$i++ ;

print $test ;
}

}
subtestthis{
我的$test
$i=1;

虽然($i啊,好的,我现在明白了..谢谢..我一直在看的教程太基础了,甚至没有提到这一点,我想我应该从现在开始直接转到perl手册页
$i=1;
应该是
我的$i=1;
,按照现在的方式,您正在与外部范围中的变量
$i
对话,这将是一旦您开始从其他子例程内部调用子例程,就会出现错误源。
$i
很可能甚至没有在外部作用域中声明,在这种情况下,您正在与包变量对话。如果您在
使用strict;使用warnings;
下运行,则
strict
杂注将引发错误r关于未声明的变量。
// will print "it's working" when 'the loop is hit at least once,
// otherwise it'll print "it's not working"
sub testthis {
    $i = 1;
    my $test = "it's not working";

    while ($i <= 2) {
        $test = "it's working";
        $i++ ;
    }
    print $test ;
}
sub testthis {
my $test
$i = 1;
while ($i <= 2) {

$test = 'its working' ;

$i++ ;

print $test ;
}

}