почему Perl, если условие удовлетворяет пустой строке?

Я думаю, вы просто пропустили всю опцию для файла /etc/modprobe.d/cuda.conf. Попробуйте вместо этого:

options nvidia "NVreg_RestrictProfilingToAdminUsers=0"
0
18.11.2020, 11:16
1 ответ

Регулярное выражение Perl /^[Y]?$/iнечувствительно соответствует необязательному Yрегистру символов -. ?влияет на [Y], поскольку позволяет [Y]соответствовать одному или нулю символов. Это означает, что все регулярное выражение также соответствует пустой строке.

[Y]идентичен просто Y. Если бы вы использовали [Yy], он соответствовал бы символу yв верхнем или нижнем регистре -. В этом случае, поскольку вы используете /iдля получения нечувствительности к регистру -, достаточно /^Y$/i. То же самое касается теста N, используйте либо /^N$/i, либо /^[Nn]$/.

Для правильного цикла ввода сделайте что-то вроде

while (1) {
        print 'Do you wish to continue (Y/N): ';
        my $reply = <STDIN>;

        if ($reply =~ /^Y/i) { last }
        if ($reply =~ /^N/i) { print "Bye!\n"; exit }

        print "Sorry, try again\n";
}

print "Continuing...\n"

Принимает любой ответ от пользователя, начинающийся с nили y, без учета регистра -.

2
18.03.2021, 22:48

Теги

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