Perl, используя переменную из цикла While вне цикла? - PullRequest
6 голосов
/ 14 июля 2010

Это кажется очень простым, но мне трудно разобраться, так как я новичок в Perl ... Я просматривал много документации о циклах, и я все еще озадачен этим ... У меня есть подпрограмма, которая содержит цикл while, и я хочу использовать значение переменной внутри цикла вне цикла (после запуска цикла), однако, когда я пытаюсь распечатать переменную или вернуть ее из подпрограммы , это не работает, только когда я печатаю переменную из цикла, это работает ... Буду признателен за любой совет относительно того, что я делаю неправильно.

Не работает (не печатает $ test):

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

&testthis ;

Работает, печатает $ тест:

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

&testthis ;

Ответы [ 3 ]

9 голосов
/ 14 июля 2010

Вы объявляете переменную test внутри цикла, поэтому она является циклом, и как только вы выходите из цикла, переменная больше не объявляется.Добавьте my $test; только между $i=1 и while(..), и это будет работать.Область действия теперь будет целиком, а не только циклом

5 голосов
/ 14 июля 2010

Поместите 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 ;
}
3 голосов
/ 14 июля 2010

вы можете попробовать это:

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

$test = 'its working' ;

$i++ ;

print $test ;
}

}

& testthis;

Примечание: всякий раз, когда пишете код perl, лучше добавить use strict; и use warning в начале кода.

...