Perl, с помощью переменной из Цикла с условием продолжения за пределами цикла?

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

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

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

&testthis ;

Работы, $test печати:

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

&testthis ;
6
задан PerlDuck 7 August 2016 в 11:35
поделиться

3 ответа

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

9
ответ дан 8 December 2019 в 13:43
поделиться

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

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

$test = 'its working' ;

$i++ ;

print $test ;
}

}

&testthis ;

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

3
ответ дан 8 December 2019 в 13:43
поделиться

Поместите 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 ;
}
5
ответ дан 8 December 2019 в 13:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: