Я написал сценарий, который требует от пользователя ввода ответа, который сохраняется как переменная. Проблема в том, что я использовал цикл для этого, и у меня есть второй вопрос, который требует ввода пользователя, но это не входит в первый цикл. Вывод из второго вопроса требует, чтобы первая переменная & отвечала условию, которое печатает ответ. Я получаю сообщение об ошибке (используя предупреждения), что переменная явно не объявлена.Perl- Как я могу получить доступ к переменной, когда я устанавливаю, я использовал <STDIN> для пользователя, чтобы установить его в цикле?
Как я могу заставить Perl «запомнить» пользовательский ввод от в цикл после окончания цикла? Должен ли я продолжать цикл? Если да, то как?
Благодарим за помощь. Я прикрепил сценарий. Я предполагаю, что это просто сложно, и лучше использовать другой тип цикла, но я просто получаю зависание для fxn, поэтому было бы полезно придерживаться его. Любые другие советы по очистке кода были бы полезны.
#!C:\Perl
#lesson2XUE.pl
use warnings; use strict;
my $fas="MTESMIRDVELAEEALPKKTGGPQG";
my $swi="MSTESMIRDV ELAEEALPKK TGGPQG";
print "Your sequence has been determined. How would you like it displayed? FASTA/SwissProt:";
for (my $i=0; $i<4; $i++) {
my $choice=<STDIN>;
chomp $choice;
if ($choice =~ /FASTA/i) {
print $fas,"\n";
last;
} elsif ($choice =~ /SwissProt/i){
print $swi,"\n";
last;
} else {
print qq[Please type "FASTA" or "SwissProt" only\n];
}
}
sleep (1);
print "\n";
print qq[Would you like to see the other version? Y/N\n];
my $choice2=<STDIN>;
chomp $choice2;
if (($choice2 =~ /Y/i) && **($choice =~ /FASTA/i)**){
print $swi,"\n";
} elsif (($choice2=~/Y/i) && **($choice=~/SwissProt/i)**) {
print $fas, "\n";
} elsif ($choice2 =~ /N/i) {
print qq[Okay,have a good day];
}
Проблема возникает там, где сценарий выделен жирным шрифтом. Поскольку я больше не в цикле, $ choice не определен.
проблема с если (($ Choice2 = ~/Y/я) & & ** ($ выбор = ~/FASTA/я)) {** и } ELSIF ($ выбор = ~/SwissProt/i) (Понял, что я не могу выделить в сценарии «сценарий»)
Еще раз спасибо!
Вы объявляете '$ choice' внутри цикла, так что его лексической области видимости. Если вы хотите получить доступ к нему за пределами цикла, объявите его вне цикла. –
Правильно, я читал это по другим вопросам. Но как объявить что-то, что пользователь вводит? Если я снова использую, он будет ждать ввода большего количества пользователей. Как повторно объявить ввод пользователя? –
Вне цикла: 'my $ choice;' Внутри цикла: '$ choice =;' –